【发布时间】:2022-11-27 13:59:26
【问题描述】:
我想在 .Net 6 中使用 C# 从主线程(UI 线程)内的非主线程执行一些代码。
我试过使用这段代码:
await Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher.RunAsync(
Windows.UI.Core.CoreDispatcherPriority.Normal,
() => { }
);
这不起作用,因为 Windows.UI.Core.CoreWindow.GetForCurrentThread() 返回 null。
我的第二次尝试是:
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
Windows.UI.Core.CoreDispatcherPriority.Normal,
() => { }
);
这失败了,因为 Windows.ApplicationModel.Core.CoreApplication.MainView 抛出 System.InvalidOperationException。
另一种方式应该是:
await System.Windows.Threading.Dispatcher.RunAsync(
Windows.UI.Core.CoreDispatcherPriority.Normal,
() => { }
);
但是 System.Windows.Threading 命名空间对我不可用,因为我使用的是 .Net 6,它不再受支持。
任何想法,如何从主线程(UI 线程)内的非主线程执行一些代码?
【问题讨论】:
-
您没有指定您使用的是哪个 UI 框架。 UWP、Winforms、WPF?
-
只是不要忽略 InvalidOperationException,它告诉你你想做的事是不可能的。猜测原因是有风险的,但可能是因为您太早启动线程并且主窗口尚未完全初始化。或者更典型的是因为您让用户在不停止线程的情况下关闭它。