为了账号安全,请及时绑定邮箱和手机立即绑定

在WinRT中的UI线程上运行代码

在WinRT中的UI线程上运行代码

蛊毒传说 2019-09-02 09:15:52
如何在WinRT(Windows 8 Metro)中的UI线程上运行代码?该Invoke方法不存在。
查看完整描述

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;


查看完整回答
反对 回复 2019-09-02
?
当年话下

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和后期版本。


查看完整回答
反对 回复 2019-09-02
?
蓝山帝景

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);



查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 599 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信