c# – 手动马歇尔到一个线程

c# – 手动马歇尔到一个线程,第1张

概述在WinForms中,您有Control.BeginInvoke(),这意味着您可以编组从后台线程到创建控件句柄的主UI线程的调用. 这很好,但是如何(在C#中)你会在两个“标准”线程之间做到这一点? 我编写了一个服务总线,它有一个处理器线程来消费消息.我想要一个计时器来触发,这会导致处理器线程做某事,而不是在计时器的线程中运行的代码. 当然我可以使用线程同步(Monitor / using(){ 在WinForms中,您有Control.BeginInvoke(),这意味着您可以编组从后台线程到创建控件句柄的主UI线程的调用.

这很好,但是如何(在C#中)你会在两个“标准”线程之间做到这一点?

我编写了一个服务总线,它有一个处理器线程来消费消息.我想要一个计时器来触发,这会导致处理器线程做某事,而不是在计时器的线程中运行的代码.

当然我可以使用线程同步(Monitor / using(){…}),但想知道它是如何正常完成的.

解决方法 不幸的是,答案很难在这里给出,因为它高度依赖于线程的性质.

线程之间的编组并不神奇.有一种潜在的机制可以做到.例如,在WinForms中,Control.Invoke样式函数通过消息传递工作.在UI线程中发布了一条消息,消息泵将最终提取此消息并将其转换为Marshal’d调用.

为了编组标准线程之间的调用,它必须具有一些能力,通过它可以检测到要发生的编组调用,然后进行该调用.这通常通过某种消息传递来完成.

恕我直言,最常用的方法是让你的线程实现,提供并安装SynchronizationContext.这是在线程之间定义Marshaling机制的更标准方法.

总结

以上是内存溢出为你收集整理的c# – 手动马歇尔到一个线程全部内容,希望文章能够帮你解决c# – 手动马歇尔到一个线程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1262953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存