Stahování XML souboru ze serveru v cyklu.

Programování v C# a .NET obecně
Odpovědět
mceza

Stahování XML souboru ze serveru v cyklu.

Příspěvek od mceza » úte bře 19, 2013 15:02

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):

Kód: Vybrat vše

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
Příspěvky: 1096
Registrován: stř lis 24, 2010 22:29
Zařízení: L920, L930, L950 XL, iPhone 7 Plus
Bydliště: Líbeznice

Stahování XML souboru ze serveru v cyklu.

Příspěvek od steelspace » úte bře 19, 2013 15:15

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
Příspěvky: 3
Registrován: čtv kvě 11, 2017 7:54
Zařízení: Iphone

Stahování XML souboru ze serveru v cyklu.

Příspěvek od Titti » čtv kvě 11, 2017 8:06

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

Uživatelský avatar
SmetyCZ
smartmaniak
smartmaniak
Příspěvky: 1589
Registrován: pon čer 09, 2014 14:54
Zařízení: Huawei P9 Lite 2017
Bydliště: Plzeň

Stahování XML souboru ze serveru v cyklu.

Příspěvek od SmetyCZ » čtv kvě 11, 2017 8:40

Š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
Příspěvky: 3
Registrován: čtv kvě 11, 2017 7:54
Zařízení: Iphone

Stahování XML souboru ze serveru v cyklu.

Příspěvek od Titti » čtv kvě 11, 2017 9:10

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

Odpovědět

Zpět na „C# a .NET“

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host