WPF更新UI报错

有时候在异步代码里直接更新界面UI会报错:调用线程无法访问对象,因为另一个线程拥有该对象。
我们可以使用如下来解决这个问题:

// 这里的this.window就是窗口实例,我是通过属性传到线程A类
this.window.Dispatcher.Invoke(new Action(() => {
// 进行原来窗口对象的操作 do soming...
}));

但是每次这样写又会觉得麻烦…
因此可以它封装成一个静态类,使用很简单,

public static class UIThread
{
  private static Action executor = action => action();
     public static void InitializeWithDispatcher()
     {
         var dispatcher = Dispatcher.CurrentDispatcher;
         executor = action =>
         {
             if (dispatcher.CheckAccess())
                 action();
             else dispatcher.BeginInvoke(action);
         };
     }

     public static void OnUIThread(this Action action)
     {
         executor(action);
     }
   }

使用很简单,程序入口处调用InitializeWithDispatcher函数

public class Program
{
    public static void Main(string[] args)
    {
        UIThread.InitializeWithDispatcher();
    }
}

以后使用的时候,只需调用OnUIThread函数即可。

UIThread.OnUIThread(new Action(() => {
    //do something
}));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值