如何解决C#/UWP 中的不同 Dispatcher 方法
我发现了 3 种使用调度程序的不同方式
await Windows.UI.Core.CoreWindow.GetForCurrentThread().dispatcher.RunAsync(Windows.UI.Core.CoredispatcherPriority.normal,() =>
{
// ...
});
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.dispatcher.RunAsync(Windows.UI.Core.CoredispatcherPriority.normal,() =>
{
// ...
});
await dispatcher.RunAsync(Windows.UI.Core.CoredispatcherPriority.normal,() =>
{
// ...
});
我不明白它们之间的区别以及何时使用哪个。我的项目只有一个“页面”。哪一种是“最好”的方式?
编辑//抱歉这个问题,目前我还在学习,但没有找到对这个主题的任何解释。
解决方法
所有这些实际上都是命名空间 System.Windows.Threading
中密封类 Dispatcher
的实例。
从一个角度来看,有与类同名的实例是不幸的。另一方面,它很方便,因此无需查找给定的实例名称即可访问它。
通常,您可以使用 Task.Run
从 UI 线程启动后台任务(否则可能会阻止您的 GUI),并且从任务中,您使用调度程序将更新发送到 GUI:
Task.Run(() =>
{
// background work
Application.Current.Dispatcher.Invoke(() =>
{
// non blocking UI updates
});
}
Using the C# Dispatcher in WPF Applications
Build More Responsive Apps With The Dispatcher
,什么时候用哪个
不要使用它们。
不要让后台线程进入用户界面,而是让用户界面成为应用的“驱动程序”。使用 await
获取异步操作的结果,使用 Progress<T>
报告进度。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。