2011-01-14 2 views
1

Ich habe ein Formular mit 2 Steuerelementen darauf. Steuerelement 1 hat mehrere Suchkriterien und der Benutzer kann auf eine Schaltfläche klicken, um die Suche zu starten. Control 2 verfügt über eine GridView, die die Suchergebnisse anzeigt und eine PictureBox mit einem animierten Gif enthält.Verhindern, dass ein animiertes GIF von WinForms PictureBox während der Verarbeitung angehalten wird?

Control 1 hat eine Methode, die eine verschachtelte foreach-Schleife hat, die mehr als 5 Minuten dauert (abhängig von den Suchkriterien, manchmal wird sie fast sofort beendet).

Was passiert ist, dass ich eine Methode auf Steuerelement 2 aufrufen, die die PictureBox sichtbar macht und das animierte GIF startet. Sobald die foreach-Schleife getroffen wird, dauert das Bild vollständig. Wann immer ich MessageBoxes zeige, beginnt das Bild wieder zu laufen (ich nehme an, es ist, weil die MessageBox blockiert). Sobald die MessageBox geschlossen ist, hört das Bild auf zu animieren.

Ich nehme an, dass ich etwas mit threading verwenden muss, aber alles, was ich versuche (ImageAnimator, Thread, der eine Methode aufruft, die Invoke aufruft, usw.) scheint nicht zu funktionieren. Irgendwelche Hinweise, mit welchen Ereignissen/Bibliotheken ich arbeiten muss, damit dies funktioniert? Irgendwelche guten Beispiele zu folgen?

Antwort

8

Ihr lang laufender Code wird im GUI-Thread ausgeführt und blockiert die interne Nachrichtenschleife, so dass jede GUI gestoppt wird. Versuchen Sie, Ihren Code in einem separaten Arbeitsthread auszuführen.

+0

Das Umschalten der Logik funktionierte perfekt. Ich habe nicht daran gedacht, den blockierenden Code in einen eigenen Thread einzufügen, anstatt die PictureBox-Zeichnung in einen Thread einzufügen. – Brandon

Verwandte Themen