当前位置: 首页 > news >正文

DispatcherSynchronizationContext and Dispatcher

https://www.cnblogs.com/liangouyang/archive/2008/11/20/1337907.html

 SynchronizationContext提供一个自由线程的同步上下文,一个常用的用法是把UI线程的同步上下文保存起来,传给另一个线程,因为UI只能再UI线程中操作,在另外一个线程,用SynchronizationContext把操作跳转到UI线程。

SynchronizationContext.Current 获取当前线程的同步上下文

SynchronizationContext.Post()        在这个上下文下发送异步方法

SynchronizationContext.Post     ()    在这个上下文下发送同步方法

SynchronizationContext.SetSynchronizationContext() 设置当前同步上下文

两个子类:WindowsFormsSynchronizationContext : windows form同步环境

                    DispatcherSynchronizationContext : WPF同步上下文

DispatcherSynchronizationContext构造函数可以传dispather,如果没有传入,则默认与当前dispather关联。

The Dispatcher maintains a prioritized queue of work items for a specific thread,就是windows的消息泵.一个dispatcher只能与一个线程相关联,关闭则不能重启。调Dispatcher.CurrentDispatcher时,如果当前线程没有dispather,会创建一个。在wpf中,DependencyObject只能被其关联的dispatcher访问。

SynchronizationContext VS Dispatcher

 

Dispather更加适用于能够确认在UI线程中调用的情况,在不能确认的时候更适合用SynchronizationContext。如果在非UI线程调Dispather.CurrentDispatcher(), 然后dispatcher.BeginInvoke(),什么都不会发生,没有异常,没有警告。如果在非UI线程调SynchronizationContext.Current,则返回null.利用这个特性,可以对UI与非UI分别操作:

Public void start()

{

            m_Context = SynchronizationContext.Current;

if (m_Context != null)
   {
      m_Context.Post(new SendOrPostCallback(PostCallback), message);
   }
   else OnMessage(message); // non-UI thread called Start

}

http://www.lryc.cn/news/234248.html

相关文章:

  • java类型属性set方法无法被赋值
  • 【2】SM2验签工具和RSA验签工具
  • Python (十一) 迭代器与生成器
  • 通过maven命令手动上传jar私服Nexus
  • 记一次用jlink调试正常,不进入调试就不能运行的情况
  • 搞科研、写论文,如何正确使用GPT?AIGC技术解析、提示词工程高级技巧、AI绘图、ChatGPT/GPT4应用
  • Java实现的插件化策略模式
  • 【jvm】MinorGC、MajorGC和FullGC
  • Redis:java和SpringBoot中使用Redis
  • Java的XWPFTemplate word生成列表
  • 基于RFID的自动化仓储设备研发项目可行性研究报告
  • ajax异步传值以及后端接收参数的几种方式
  • 千年TGS服务器日志报错如何解决
  • 读取Json BugFix
  • 【Gradle构件工具深度学习】
  • Attention Transformer
  • [最新榜单] 智能手机数据恢复的 10 款最佳应用
  • 修改CentOS默认mail发件名称
  • Lesson 03 C/C++内存管理
  • 【SA8295P 源码分析】127 - 摄像头 GMSL1、GMSL2 加串-解串器 常用寄存器配置整理(正在更新中......)
  • Docker与Kubernetes结合的难题与技术解决方案
  • CVE-2021-42287CVE-2021-42278 域内提权
  • springcloud整合nacos实现服务注册
  • redis实现布隆过滤器
  • 山西电力市场日前价格预测【2023-11-19】
  • 深眸科技革新升级OCR技术,与AI视觉实现有效融合赋能各行业应用
  • 性能测试知多少---系统架构分析
  • 【观察】华为:数智世界“一触即达”,应对数智化转型“千变万化”
  • 我的 2023 秋招总结,拿到了大厂offer
  • 力扣labuladong——一刷day36