Wir stellen eine Bibliothek zur Verfügung, die Code für ihre eigenen benutzerdefinierten Threads ausführen muss. Sobald dies erledigt ist, möchte ich, dass diese Threads Callbacks (Eventhandler) über eine Dispatcher
(System.Windows.Threading.Dispatcher
) aufrufen. Der Bibliotheksbenutzer muss den Dispatcher verwenden, um die Ereignisbehandlung an.Hat jeder WinRT/Windows Core-Thread einen Dispatcher?
Wir könnten einfach immer auf CoreApplication.MainView.CoreWindow.Dispatcher
versenden, aber nicht alle Programme (z. B. Windows 10 IoT Core-Anwendungen) bieten eine Benutzeroberfläche und daher fehlt ihnen ein Hauptfenster.
Kann der Benutzer einfach auf System.Windows.Threading.Dispatcher.CurrentDispatcher verweisen, um die seines Threads zu erhalten? Oder können nicht alle Threads einen Dispatcher haben?
Bearbeiten: Hier ist mehr Kontext für diese Frage. Hoffentlich macht es die Frage leichter zu verstehen: https://github.com/getsenic/nuimo-windows/issues/2
Warum möchten Sie Ereignishandler auf UI-Thread ausführen? Es ist ein häufiger Fall, wenn ein Objekt Ereignisse im Hintergrund (nicht UI) auslöst. Der Benutzer Ihrer Bibliothek muss Dispatcher verwenden, um mit diesen Ereignissen fertig zu werden, wenn er im Ereignishandler Zugriff auf UI-Elemente benötigt. – RavingDev
Das WPF-Verhalten ist eher unintuitiv und hat viele Programmierer in Schwierigkeiten gebracht, viele Fragen dazu hier. WinRT hat diesen Fehler nicht wiederholt, Sie können nur einen Dispatcher aus einem Fenster holen. Was ist der logische Ansatz, ein Fenster kann nur funktionieren, wenn es von einem Thread erstellt wurde, der eine Dispatch-Schleife hat, ohne diese Schleife ist es tot als ein Türnagel. Wenn Sie kein Fenster haben, müssen Sie nicht mehr Code für einen bestimmten Thread ausführen. –
Es gibt eine Methode, Ereignisse im UI-Thread auszulösen. Es ist jedoch erforderlich, dass Ihr Objekt über den UI-Thread erstellt/initialisiert wurde. Ist es dein Fall?Ich meine, dass es nur funktioniert, wenn das Objekt aus dem UI-Thread erstellt wurde. – RavingDev