Если я использую System.Windows.Forms.ContextMenuStrip для настройки меню панели задач с кнопками и действиями, мне нужно будет запустить в потоке пользовательского интерфейса System.Windows.Forms.ApplicationContext, и вызов для этого блокируется:
Код: Выделить всё
...
trayComponent.InitializeComponent();
System.Windows.Forms.Application.Run(trayComponent); // Blocks calling thread
Код: Выделить всё
await UIDispatcher.BeginInvoke(() => {
SettingsWindow settingsWindow = new SettingsWindow();
ElementHost.EnableModelessKeyboardInterop(settingsWindow);
settingsWindow.Show(); // no app.Run anywhere
});
Код: Выделить всё
// 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?
Вот полный пример: https://github.com/YetAnotherGeorge/TrayWithWPF>
Подробнее здесь: https://stackoverflow.com/questions/797 ... -ui-thread
Мобильная версия