WPF项目中碰到一个问题:调用第三方SDK的操作必须在同一线程(sdk提供方技术要求)
这个要求很奇怪有没有
然而它就这样要求了
那我们就来分析下如何控制所有的操作都在同一线程
第一种方法:
所有有关SDK的操作都在主线程里面做
App.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)delegate ()
{
对sdk的操作
});
第二种方法:事件发布订阅
任意线程Publish数据,在主线中 Subscribe 然后执行对sdk的操作
这个两个方案都不得劲
思考 为什么必须的同一个线程
这里有个知识点:线程上下文
同一线程的核心目的是不是为了保障线程上下文的一致性
WPF中如何保障保障线程上下文的一致性呢
Task.Run(()=>{获取线程上下文});
发现为Null
原来WPF只有主线程有线程上下文
使用这个上下文中的post 和send 可以满足对sdk调用需求