C # Fenster wird leer wenn besetzt - Progressbar? Aber wie?

8

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?

    
ihavenoaccount 19.08.2011, 13:34
quelle

4 Antworten

4

Es gibt ein schönes Beispiel in der Dokumentation zur BackgroundWorker-Klasse .

    
artplastika 19.08.2011, 13:37
quelle
0

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.

    
Daniel Walker 19.08.2011 13:38
quelle
0

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.

    
qJake 19.08.2011 13:39
quelle
0

Sie können die BackgroundWorker-Klasse verwenden.

Siehe answer

    
CB. 19.08.2011 13:37
quelle