3 回答
TA贡献1842条经验 获得超12个赞
从非UI线程直接获取CoreWindow更容易。以下代码可以在任何地方使用,即使是GetForCurrentThread()或Window.Current返回null。
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
<lambda for your code which should run on the UI thread>);
例如:
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
// Your UI update code goes here!
});
您需要引用Windows.ApplicationModel.Core命名空间:
using Windows.ApplicationModel.Core;
TA贡献1890条经验 获得超9个赞
使用:
从您的UI线程,执行:
var dispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
从你的背景(非UI线程)
dispatcher.RunAsync(DispatcherPriority.Normal,
<lambda for your code which should run on the UI thread>);
这应该适用于CP和后期版本。
TA贡献1843条经验 获得超7个赞
在我看来,这是一种更容易的方法。
获取与UI关联的TaskScheduler。
var UISyncContext = TaskScheduler.FromCurrentSynchronizationContext();
然后在上面的UISyncContext上启动一个新任务。
Task.Factory.StartNew(() => { /* Do your UI stuff here; */}, new System.Threading.CancellationToken(), TaskCreationOptions.PreferFairness, UISyncContext);
- 3 回答
- 0 关注
- 599 浏览
添加回答
举报