Wie kann ich meinen Dispatcher verlassen (stoppen)?

8

Ich möchte meinen Dispatcher stoppen, der im main () gestartet wurde, wenn der Benutzer auf eine Schaltfläche klickt.

%Vor%

Wenn ich diesen Code ausführe, erhalte ich folgende Fehlermeldung, wenn er in onFrameEventFocusCam :

gestoppt wird %Vor%     
Norick 18.07.2014, 09:02
quelle

3 Antworten

2

Wenn Sie BeginInvokeDispatcher aufrufen, bewirkt dies, dass der Dispatcher asynchron herunterfährt ; Der aktuelle Dispatcher-Frame muss noch bearbeitet werden, bevor er beendet wird. Da Sie jedoch in einer Schleife darauf warten, dass der Dispatcher herunterfährt, wird der aktuelle Rahmen nie abgeschlossen, sodass der Dispatcher das Herunterfahren nicht abschließen kann. Stattdessen können Sie das Ereignis ShutdownFinished abonnieren, um zu erkennen, wann der Dispatcher beendet wird.

Was den Fehler angeht, den Sie in onFrameEventFocusCam bekommen, liegt das daran, dass der Dispatcher heruntergefahren wird, so dass er den Invoke nicht verarbeiten kann; aus der Dokumentation:

  

Sobald der Shutdown-Prozess beginnt, werden alle ausstehenden Arbeitselemente in der Warteschlange abgebrochen.

Ich bin nicht sicher, was Sie zu tun versuchen, aber das Herunterfahren des Hauptdispatcher ist sehr wahrscheinlich nicht der Weg, es zu tun, da es die App effektiv stoppt ...

    
Thomas Levesque 18.07.2014 09:14
quelle
2

Es ist nicht klar, was Sie ursprünglich beabsichtigten.

Dieser Code sollte (fast) für immer hängen, da HasShutdownStarted erst nach dem Beenden der Anwendung aktiviert wird.

%Vor%

Dieser Code terminiert die Ausführung des Delegaten im UI-Thread. Sieht vollkommen gut aus.

%Vor%

Dieser Code sieht möglicherweise problematisch aus, denn wenn DeleteObject das Handle tatsächlich freigibt, wird das Handle möglicherweise zweimal freigegeben, einmal in Delete und einmal in Dispose. Dies kann werfen.

%Vor%     
Alon Catz 24.01.2015 18:30
quelle
0

Um den Stop-Dispatcher auf Ihrem Hauptanwendungs-Thread laufen zu lassen, sollten Sie die Rückgabe von der Aktion aufrufen, die an Dispatcher.Invoke übergeben wurde.

    
mr100 18.07.2014 09:23
quelle

Tags und Links