2016-06-01 7 views
0

Ich möchte ein Warte-GIF anzeigen, während ich eine Datei verifiziere und das habe ich bisher versucht.
Es gibt ein Formular - Form1, wo Benutzer auf eine Schaltfläche klicken, um eine Datei zu überprüfen, und es gibt ein anderes Formular - Warten, mit nur einer Bildbox, die ein gif-Bild zeigt.Modales Ladenfenster in Winforms für lang andauernden Prozess anzeigen

button_click() 
{ 
    Wait wait = new Wait(); 
    wait.ShowDialog(); 
    VerifyFile(); 
    wait.Close(); 
} 

Das Warteformular wird zwar angezeigt, es wird jedoch nicht geschlossen. Auch die Überprüfung wird nicht durchgeführt. Es wird nur fortgesetzt, wenn ich das Warteformular manuell schließe. Wie Sie das Warteformular automatisch schließen, sobald VerifyFile() abgeschlossen ist.

+0

Sie müssen sich um die Erstellung von Callbacks, Delegaten und asynchronen Prozessen kümmern. Der Prozess, auf den Sie warten, muss einen Rückruf an das wartende Formular senden, wenn es fertig ist, sodass das Warteformular geschlossen werden kann. Wenn Sie einen Fortschrittsbalken haben möchten, benötigen Sie während des langen Prozesses mehr Rückrufe. Das wird deine beste Wette sein. Es ist noch nichts, was ich getan habe, aber ich habe es nach meiner Erfahrung gesehen. –

+0

Mögliches Duplikat von [Öffnen Sie eine zweite winform asynchron, aber verhalten Sie sich immer noch wie ein Kind zum übergeordneten Formular?] (Http://stackoverflow.com/questions/2435752/open-a-second-winform-asynchron- but-still-behave -as-a-child-to-the-parent-f) – NineBerry

Antwort

0

Das Problem mit Ihrem Code ist, dass die Form.ShowDialog() -Methode synchron ist und auf das Ergebnis aus dem "Formular" -Dialog wartet. Dies bedeutet, dass die Ausführung des Codes so lange angehalten wird, bis der Dialog "Warten" geschlossen wird.

Betrachten Sie die VerifyFile() -Methode in Wait Dialog zu bewegen:

class Wait: Form 
{ 
    public Wait() : base() 
    { 
     System.Threading.Tasks.Task.Factory.StartNew(() => VerifyFile()); 
    } 
} 

Sie diesen Dialog schließen kann, wenn nach VerifyFile execute über.

+0

Es ist kein gutes Design, um die Aufgabe in eine Form zu bringen, die nur zeigen soll, dass etwas im Gange ist. –

+1

Whole OOP Design ist ein großer Fehler, aber immer noch Leute benutzen es ... Ich weiß nicht, warum Menschen von hier sich um "Design-Muster" und so kümmert. Wenn du dann kreativ sein willst, poste Tonnen von Code-Zeilen, nur um Beispiele zu zeigen, die "gut gestaltet" sind. –

Verwandte Themen