Stahování XML souboru ze serveru v cyklu.

Programování v C# a .NET obecně
Post Reply
mceza

Stahování XML souboru ze serveru v cyklu.

Post by mceza »

Dělám na aplikaci, která načítá ze serveru XML s daty, rozparsuje je a na základě těch dat přidá piny do mapy.

Problém je však v tom, že bych potřeboval, aby se to celé načetlo a obnovilo znovu v nějakém intervalu (10s). V tuto chvíli moje řešení funguje tak, že to stahuji přes DownloadStringAsync(). To ale do cyklu uzavřít nejde, protože to pak hlásí "WebClient does not support concurrent I/O operations." - proč, to už chápu.

Jak to tedy upravit tak, aby po zapnutí aplikace naskočil cyklus, kde by se každých 10s ten xml soubor stáhl znovu? V současnoti to mám přibližně takto (pro jednoduchost dávám ořezaný kód):

Code: Select all

public partial class MainPage : PhoneApplicationPage
{
  public WebClient client = new WebClient();
  
  public MainPage()
  {
      InitializeComponent();
      
      client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
      LoadData(client);
      
      void LoadData(WebClient client)
      {
        client.DownloadStringAsync(new Uri("http://url.zdrojoveho.xml"));
      }
  
      void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
      {
        string a = e.Result;
        XDocument doc = XDocument.Parse(a);
        var nejakyList = from xxxx in doc.Descendants("XML")
                          select (new nejakaTrida
                          {
                            //naplnit daty
                          });
        foreach (nejakaTrida in nejakyList)
        {
          //pridam pushPiny atd...
        }  
      }
    }                  
}
Několik hodin jsem hledal, zkoušel, avšak bez výsledku. Pomůže někdo?
steelspace
smartmaniak
smartmaniak
Posts: 1094
Joined: Wed Nov 24, 2010 22:29
Zařízení: L920, L930, L950 XL, iPhone 7 Plus
Location: Líbeznice

Stahování XML souboru ze serveru v cyklu.

Post by steelspace »

Udělal bych si Timer. Ten by nebyl auto-reset, ale restartoval by se znovu až po načtení dat (nebo chybě).
Tak nevznikne nový download pokud už nějaký jiný běží.
Ještě bych doporučil použít BackgroundWorker na tu část parsování dat. Tím se zamezí zabržďování GUI.
Titti
můj třetí příspěvek
můj třetí příspěvek
Posts: 3
Joined: Thu May 11, 2017 7:54
Zařízení: Iphone

Stahování XML souboru ze serveru v cyklu.

Post by Titti »

Pro zajištění aby do určitého místa nevstupovalo vicekrát, jsou nejlepši rešení Locky anebo Mutexy, záleží na konkretní implementaci.
pro více informaci:
https://msdn.microsoft.com/cs-cz/librar ... .110).aspx
SmetyCZ
smartmaniak
smartmaniak
Posts: 1565
Joined: Mon Jun 09, 2014 14:54
Zařízení: Huawei P9 Lite 2017
Location: Plzeň

Stahování XML souboru ze serveru v cyklu.

Post by SmetyCZ »

Škoda že po 4 letech a tázající už tu nepůsobí.
Titti
můj třetí příspěvek
můj třetí příspěvek
Posts: 3
Joined: Thu May 11, 2017 7:54
Zařízení: Iphone

Stahování XML souboru ze serveru v cyklu.

Post by Titti »

:-) to jsem slepej... přehlidl jsem rok 2013, i to že "deaktivovaný účet"
Post Reply

Return to “C# a .NET”

Who is online

Users browsing this forum: No registered users and 3 guests