Laden...

RSS-Reader mit Backgroundworker

Erstellt von supaburn vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.057 Views
S
supaburn Themenstarter:in
17 Beiträge seit 2009
vor 11 Jahren
RSS-Reader mit Backgroundworker

Hi,

ich versuche die RSS-News über LINQ in einem BackgroundWorker zu laden um eine GUI-Freeze zu umgehen und binde die listbox über das ItemsSource Property.
Leider klappt das ganze nicht so wie ich mir das vorstelle da ich ein UpdateLayout() ausführen müsste, was aber aufgrund des Threads "außerhalb" nicht geht.

Code ist folgender:

BackgroundWorker worker = new BackgroundWorker();
           worker.DoWork += new DoWorkEventHandler(worker_DoWork);
           worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
           worker.RunWorkerAsync();

im DoWork-Event LINQ um RSS-Title zu sammeln

var xElem2 = XElement.Load("http://www.spiegel.de/schlagzeilen/tops/index.rss");

            var title = from titles in xElem2.Descendants("item")
                        select titles.Element("title").Value;

so, ab hier komme ich nicht mehr weiter, ein UpdateLayout() im DoWork oder RunWorkerCompletet-Event ist ja leider nicht möglich.
Jemand eine Idee wie das zu bewerkstelligen ist?

Danke für Eure Hilfe.

Mfg

16.825 Beiträge seit 2008
vor 11 Jahren

In XElement.Load() unterstützt nicht den Aufruf einer URL - jedenfalls nicht Standardmäßig. In der MSDN - wenn Du einen Blick riskiert hättest - ist aber auch nur der Weg über eine lokale Datei oder einen Stream dokumentiert. Wie Du auf die Möglichkeit der URL kommst sehe ich nicht.
Hier musst Du den Umweg über WebRequest und XmlTextReader gehen, dessen Stream Du dann ins XElement laden kannst.

S
supaburn Themenstarter:in
17 Beiträge seit 2009
vor 11 Jahren

Danke für den Hinweis, ich frage mich aber schon wieso das scheinbar üblich ist RSS-Feeds direkt über XElement.Load abzurufen.

Abgesehen davon, das eigentliche Problem ist ja das ganze mit einem BackgroundWorker zu bewerkstelligen.

6.862 Beiträge seit 2003
vor 11 Jahren

@Abt

Doch doch, das tut. In der MSDN steht auch

A URI string referencing the file . Da steht nichts davon, dass die Datei lokal vorhanden sein muss. Warum sie nicht konsequenterweise URI statt string als Datentyp benutzen weiß ich auch nicht.

Zum Problem: Wieso meinst du UpdateLayout aufrufen zu müssen? Wenn dein Binding richtig funktioniert, dann bekommt die GUI doch mit, dass du neue Daten hast und aktualisiert automatisch die Anzeige. Im RunWorkerCompletet Event kannst du übrigens problemlos die GUI ändern, da der Eventhandler auch im GUI Thread läuft, ansonsten gilt halt wie immer [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke)

Baka wa shinanakya naoranai.

Mein XING Profil.