C# - 如何在Timer的Elapsed事件中调用其他线程上的方法?

时间:2012-07-03 19:04:38

标签: c# timer multithreading

我有一个System.Timers.Timer对象,在我的Elapsed方法中我想调用myObject.TriggerEvent(...),但我希望在创建的线程myObject上进行调用。是否有捷径可寻?无论出于何种原因,这是一个坏主意吗? myObject基本上是一个事件管理器服务,所以我希望它在它创建的线程上触发事件。我使用计时器的原因是因为我有另一个正在轮询服务以进行更新,它通过myObject方法通知TriggerEvent

2 个答案:

答案 0 :(得分:1)

您可以制作自己的SynchronizationContext实施,并将其实例提供给myObject.TriggerEvent的来电者。如果您在WPF,SL或WinForms应用程序中使用myObject,则可以使用其现有的SynchronizationContext类实现并在GUI线程上创建myObject

答案 1 :(得分:0)

我建议使用Dispatcher。它是在WPF的背景下创建的,但没有理由不能在其他地方使用它。我已经使用了几次,但我总是有一个消息泵(Win32),但我相信它也可以在服务上下文中使用(IIS等) - 但是我没有写过这样的代码,所以YMMV。 This is a good article from a WPF angle

埃里克