Ich habe ein Programm, das einige Kopieraufträge (über File.Copy) ausführt, die ein paar Minuten dauern könnten. Wenn der Benutzer in dieser Zeit ein anderes Fenster in den Vordergrund bringt, wird das Programmfenster leer, da es sich nicht neu zeichnet.
Jetzt möchte ich eine Fortschrittsbalken in einem zusätzlichen Fenster in der Mitte des Bildschirms anzeigen, aber dieses Fenster wird auch leer.
Also habe ich es in einem anderen Thread gestartet, der nicht geholfen hat.
Ich bin mir ziemlich sicher, dass jemand das schon einmal gemacht hat, aber ich kann kein funktionierendes Beispiel finden. Irgendwelche Ideen?
Es gibt ein schönes Beispiel in der Dokumentation zur BackgroundWorker-Klasse .
ChrisF hat Recht. Ihre lange Operation sollte in einem BackgroundWorker -Thread durchgeführt werden. Sie können BackgroundWorker verwenden, um den Fortschritt zu melden und diesen bis zu einem Fortschrittsbalken in Ihrem Formular anzuhängen.
Sie müssen Ihre Operation mit einem BackgroundWorker
verknüpfen. Es gibt andere Möglichkeiten, die Operation zu fädeln, aber diese ist wahrscheinlich die einfachste und führt weiterhin das Pumpen von Nachrichten im Vordergrund durch, sodass Windows nicht der Ansicht ist, dass Ihre Anwendung nicht mehr reagiert.
Eine andere Option wäre die Verwendung von Thread
und die Verwendung von Thread.Join
Warten Sie, bis die Hintergrundaufgabe abgeschlossen ist, da Thread.Join
während des Wartens auch die Standard-Nachrichtenpumpeninformationen an Windows sendet.
Tags und Links c# multithreading winforms progress-bar