2010-11-23 6 views
0

Ich mache eine Anwendung, die Lesen von Bilddateien und Anzeigen in einem von mir selbst entworfenen Benutzersteuerelement enthält. Diese oder andere CPU-intensive Aktivität neigt dazu, den GUI-Glitch zu stören und/oder nicht mehr zu reagieren.Wie zu verhindern CPU-intensive Aktivität hängen oder verlangsamen die GUI in .NET

Ich bin mir ziemlich bewusst, dass ich diese CPU-intensive Aktivitäten in einem anderen Thread setzen sollte, aber bis jetzt habe ich keinen Artikel oder Beispielprojekt gefunden, das mir eine klare Anleitung zum Umgang mit diesen Problemen geben würde.

Kann mir jemand zeigen, wo ich diese Informationen finde?

Vielen Dank im Voraus.

MTH

+0

Die Vorschläge zur Verwendung von BackgroundWorker sind gut, aber bedenken Sie auch, dass das Lesen von Bilddateien normalerweise nicht "CPU-intensiv" ist, sondern I/O-intensiv. Das ändert nichts an Ihrer Motivation, den UI-Thread zu entfernen, aber Sie sollten den Unterschied im Auge behalten. –

+0

@Will Dean - sicher, aber alle E/A-Aktionen werden gefolgt von der Verarbeitung von Daten, die empfangen wurde und das, was CPU beschäftigt, ich sage nicht, dass ich wie IOM verzichten möchte, aber ich nehme es als weniger relevant. – MoreThanChaos

Antwort

4

Werfen Sie einen Blick auf die Background Worker Klasse.

Es ist ein Beispiel zeigt, wie es in der Verbindung zur Verfügung gestellt als auch verwenden :)

+0

Aber sollte ich mehr Aufmerksamkeit auf diese Klasse oder auch/besser sollte mehr Aufmerksamkeit auf Threads nehmen – MoreThanChaos

+0

Das ist für jemanden mit mehr Erfahrung im Threading im .NET-Framework zu beantworten :) –

+0

@MoreThanChaos Es lohnt sich zu lernen, wie Threads arbeiten und wie Machen Sie das, was Sie tun, mit einfachen alten Threads, aber danach ermöglicht Ihnen die BackgroundWorker-Klasse, saubereren, leichter zu verstehenden, besser wartbaren Code zu schreiben. Wie Wrapper tun. – crdx

4

Hintergrund Worker ist eine gute Wahl GUI ansprechbar zu machen.

1- Hintergrundarbeiter ist eine ereignisbasierte Klasse.

2- Es löst Ereignisse wie ProgressReport, DoWork, WokerCompleted.

3- Sie müssen nur diese Ereignisse verbinden, und Sie sind gut zu gehen.

4- Es ist sehr einfach zu verwenden und zu empfehlen, wenn Sie gerade mit Threading-Konzepten begonnen haben.

Verwandte Themen