| 

.NET C# Java Javascript Exception

6
Hallo,
meine Frage richtet sich an die richtige Trennung von GUI- Thread und Programm- Thread, auf Basis von VB .Net.

Meine bischerigen Anwendungen sind alle Objektorientiert aufgebaut. Mit was ich mich bislang, aufgrund von relativ "kleinen" Anwendungen, nicht beschäftigt habe ist das trennen meines GUI / Pogrammthreads voneinander.

Wie geht man bei sowas vor? Ich stelle mir das ziemlich kompliziert vor, da einfach beispielweise die Kommunikation zwischen dem GUI und jedem weiteren Thread, meines Wissens nach, sehr aufwendig ist.

Vielleicht kann mir das jemand, gar auch an einem bereites existierenden Tutorial, erklären.

Im Internet bin ich bislang mit meinem Wissen nicht schlau geworden, wie das dann tatsächlich bei Anwendungen mit relativ vielen Zeilen Code funktioniert. Immer nur diese "Eine-Instanz-Beispiele" aus jenen man nichts auf größere Vorhaben übertragen kann.

Allgemein auch asynchrone abläufe (wie downloads usw.). Geht es hier nur um Multithreading?

Grüße und danke im voraus

Spicejam
News:
09.06.2012
spicejam 851 2 6
1 Antwort
3
Deine Frage ist ein wenig unscharf formuliert, aber ich gehe mal davon aus, dass du bei länger laufenden Aktionen erreichen willst, dass deine GUI reaktiv bleibt. Ich gehe auch davon aus, dass du dich in der .NET-Welt bewegst (leider geht das aus deiner Frage nicht hervor).

Zumm abkoppeln der Programmlogik vom GUI-Thread bieter das .NET Framework die unterschiedlichsten Möglichkeiten. Das fängt an mit der Klasse "Backgroundworker", geht über die Task Parallel Library und endet mit den neuen Schlüsselwörtern async / await im kommenden .NET Framework 4.5. Einen, wie ich finde, ganz guten Einstieg bietet der folgende Artikel: .NET asynchrony in the UI context. Die Beispiele sind zwar in C#, aber es werden alle wesentlichen Möglichkeiten für Multithreading gezeigt. Eine ausführlichere Einführung bietet folgende Artikelserie Beginners Guide to Threading in .NET. Der selbe Author hat auch eine gute Einführung in die Task Parallel Library geschrieben (Task Parallel Library). Zum Thema async/await habe ich folgende Artikelserie gefunden Asynchrone Programmierung mit async/await in .NET. Die Beispiele sind leider alle in C#, aber 1:1 auf VB übertragbar.

Ich wende Multithreading generell sehr sparsam an, weil es die Programmierung und vor allen Dingen das Debuggen sehr aufwändig macht. Für normale Dialog-Anwendungen macht es in der Regel keinen Sinn, die Anwendungslogik in separate Threads auszulagern. Da die Verwaltung von Threads ja auch Zeit kostet, wird der Code oft langsamer, als wenn man sequentiell programmiert.

Bei länger laufenden Datenbankabfragen, aufwändigen Berechnungen oder bei Downloads macht es jedoch Sinn, diese in eigene Threads auszulagern, damit die GUI nicht einfriert. Hier verwende ich meist den BackgroundWorker, weil dieser relativ einfach zu handhaben ist.

Gruß
Klaus
10.06.2012
luedi 1,7k 1 9

Stelle deine Performance-Frage jetzt!