[英]C# - How do I invoke a method on a different thread from a Timer's Elapsed event?
我有一个System.Timers.Timer
对象,在它的Elapsed方法中,我想调用myObject.TriggerEvent(...)
,但是我希望该调用发生在创建myObject
的线程上。 是否有捷径可寻? 出于任何原因,这是一个坏主意吗? myObject
是一个事件管理器服务,因此我希望它在创建它的线程上触发事件。 我使用计时器的原因是因为我有一个正在轮询服务以进行更新的计时器,它通过TriggerEvent
方法通知myObject
。
您可以创建自己的SynchronizationContext实现,并将其实例提供给myObject.TriggerEvent
的调用方。 如果在WPF,SL或WinForms应用程序中使用myObject
,则可以使用它们的SynchronizationContext类的现有实现,并在GUI线程上创建myObject
。
我建议使用Dispatcher 。 它是在WPF的上下文中创建的,但是没有理由不能在其他地方使用它。 我已经使用过几次,但是我一直有一个消息泵(Win32),但是我相信它也可以在服务上下文(IIS等)中使用-但是我没有编写这样的代码,所以YMMV。 从WPF的角度看这是一篇好文章 。
埃里克
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.