Wenn ich System.Windows.Forms.ContextMenuStrip verwende, um ein Taskleistenmenü mit Schaltflächen und Aktionen zu konfigurieren, muss ich im UI-Thread einen System.Windows.Forms.ApplicationContext ausführen, und der Aufruf dazu blockiert:
Code: Select all
...
trayComponent.InitializeComponent();
System.Windows.Forms.Application.Run(trayComponent); // Blocks calling thread
Code: Select all
await UIDispatcher.BeginInvoke(() => {
SettingsWindow settingsWindow = new SettingsWindow();
ElementHost.EnableModelessKeyboardInterop(settingsWindow);
settingsWindow.Show(); // no app.Run anywhere
});
Code: Select all
// Start WPF app event loop
_ = Task.Run(async () => {
await UIDispatcher!.BeginInvoke(() => {
TestTrayWithWPF.App app = new TestTrayWithWPF.App();
app.InitializeComponent();
app.Run(); // blocking
});
});
// Start WinForms tray component
trayComponent.InitializeComponent();
System.Windows.Forms.Application.Run(trayComponent); // also blocking, but everything works fine?
Hier ist ein vollständiges Beispiel: https://github.com/YetAnotherGeorge/TrayWithWPF
 Mobile version
 Mobile version