Entwickler-Ecke

Basistechnologien - Programm reagiert nicht während es arbeitet


manuh - Mi 17.02.10 10:13
Titel: Programm reagiert nicht während es arbeitet
Hallo, ich habe ein Programm entwickelt was auf eine Webseite zugreift und den Quellcode nach bestimmten Tags durchsucht, allerdings "hängt" sich das Programm auf während es die Webseite ausliest.
Erst nachdem der Vorgang beendet ist, reagiert es wieder. Ich denke ich muss das mittels Threads machen oder? Wenn ja, kennt jemand ein gutes Tutorial? Wenn nein, was kann ich anwenden damit ich dennoch das Programm weiter bedienen kann, solange er die Seiten ausliest?

Gruß
Manuh


JüTho - Mi 17.02.10 10:47

Hallo und :welcome:

Ich schlage einen BackgroundWorker vor: Der vereinfacht das Arbeiten mit einem Thread. In der SDK-Doku/MSDN/Hilfe ist ein brauchbares Beispiel zu lesen.

Gruß Jürgen

Nachtrag zu Daniel: Applications.DoEvents kann helfen, ist aber kritisch zu bewerten wegen Nebenwirkungen. Ich vermeide deshalb einen solchen Ratschlag (und benutze es seit längerem selbst nicht mehr).


danielf - Mi 17.02.10 10:50

Hallo und :welcome:,

das Stichwort hast du schon gesagt: Threads. Das Problem ist, das dein Programm mit dem verarbeiten beschäftigt ist und deshalb die GUI "blockiert". Du könntest auch exklusiv sagen Applications.DoEvents um die Anzeige wieder zu aktuallisieren (zwischen den einzelnen Schritten). Aber ich denke Threads sind viel besser geeignet. Doku findest du bestimmt im Openbook C# [http://openbook.galileocomputing.de/csharp/].

Ziemlich unkompliziert ist auch der BackgroundWorker. Dieser erlaubt dir auch aus dem Thread heraus auf die Gui zuzugreifen (zum Beispiel um den Fortschritt anzuzeigen).

Gruß Daniel


Kha - Mi 17.02.10 19:39

Ich nehme an, dass nur die Zeit zum Download der Datei bemerkbar ist (DoEvents hier also überhaupt nichts bringen würde). Dann gibt es eine noch einfachere Lösung: Mit WebClient.DownloadStringAsync muss man sich überhaupt nicht um Threads kümmern.