C#中的定时器和多线程

时间:2013-08-30 07:56:25

标签: c# multithreading winforms timer

我使用System.Times.Timer监视进程,这将定期调用方法。但我面临的问题是调用是使用多线程完成的。如果我删除计时器,那么它将作为STA工作。使用计时器,当我调用ElapsedMethod来调用另一个函数时,它将更改为MTA,这最终会导致我的异常。

2 个答案:

答案 0 :(得分:2)

System.Timers.Timer更改为System.Windows.Forms.Timer,所有操作都将在UI线程上执行。

如果您不想这样做,那么您可以将SynchronizingObject设置为this。因为当SynchronizingObject为null时,在系统线程池的线程上调用处理Elapsed事件的方法

答案 1 :(得分:2)

System.Timers.Timer有一个SynchronizingObject属性,您可以将其设置为将事件封送到UI线程。将其设置为表单。那就是:

System.Timers.Timer Timer1 = new System.Timers.Timer();
Timer1.SynchronizingObject = this;
// add other Timer initialization here