C# C语言中的定时器与多线程#
我正在使用System.Times.Timer监视一个进程,这将定期调用一个方法。但是我面临一个问题,调用是使用多线程完成的。如果我移除计时器,那么它将作为STA工作。使用Timer,当我调用ElapsedMethod调用另一个函数时,它将更改为MTA,这将在最后导致我出现异常。将C# C语言中的定时器与多线程#,c#,multithreading,winforms,timer,C#,Multithreading,Winforms,Timer,我正在使用System.Times.Timer监视一个进程,这将定期调用一个方法。但是我面临一个问题,调用是使用多线程完成的。如果我移除计时器,那么它将作为STA工作。使用Timer,当我调用ElapsedMethod调用另一个函数时,它将更改为MTA,这将在最后导致我出现异常。将System.Timers.Timer更改为System.Windows.Forms.Timer,所有操作都将在UI线程上执行 如果不想这样做,可以将同步对象设置为this。因为当SynchronizingObject
System.Timers.Timer
更改为System.Windows.Forms.Timer
,所有操作都将在UI线程上执行
如果不想这样做,可以将
同步对象设置为this
。因为当SynchronizingObject为null时,将对系统线程池中的线程调用处理已用事件的方法。Timers.Timer有一个属性,您可以将该属性设置为将事件封送到UI线程。将其设置为表单。即:
System.Timers.Timer Timer1 = new System.Timers.Timer();
Timer1.SynchronizingObject = this;
// add other Timer initialization here
例外情况是什么?这是System.Windows.Forms.Timer