在WPF开发中,经常遇到跨线程的问题,以及频繁使用跨线程操作UI线程中的界面元素,一些COM组件操作也是必须在UI主线程中使用,否则就会抛出各种无法访问的错误。是否有遇到过呢?为了解决各种跨线程访问的问题,可能要很长的一堆代码来完成,有没有更好的方法呢?
于是针对该问题本人封装了一个WPF异步操作常用功能库DispatcherCore,专门解决异步跨线程,需要操作UI线程的事情。
首先在程序入口处增加初始化代码:
///目的是为了初始化UI主线程
DispatcherCore.DispatcherCore.Initialize();
初始化完了以后,无论在什么线程中使用都可以直接调用。该方法包含两个参数,一个是要在UI线程运行的委托,另外一个是可以返回错误信息的回调委托。
方法如下:
public static void RunInUI(Action func, Action<Exception> action =null)
下面是调用代码:
//该方法为同步方法,即会等待完成才会继续执行后面代码
DispatcherCore.DispatcherCore.RunInUI(()=>
{
DoSomething(); //这里就可以写入需要在UI 线程运行的逻辑代码});//该方法为异步方法
DispatcherCore.DispatcherCore.AsyncRunInUI(()=>
{AsyncDoSomething(); //这里就可以写入需要在UI 线程异步运行的逻辑代码
});
其他功能等待你自己发现吧。敬请小伙伴们关注微信公众号,更多分享陆续发布。