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 ...
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%Tags und Links wpf c# dispatcher