我正在使用 System.Times.Timer 来监视进程,这将定期调用一个方法。但是我面临一个问题,即调用是使用多线程完成的。如果我删除计时器,那么它将作为 STA 工作。使用 Timer,当我调用 ElapsedMethod 调用另一个函数时,它会更改为 MTA,这最终会导致我出现异常。
问问题
2023 次
2 回答
2
更改System.Timers.Timer
为System.Windows.Forms.Timer
,所有操作都将在 UI 线程上执行。
如果你不想这样做,那么你可以设置SynchronizingObject
为this
. 因为当 SynchronizingObject 为 null 时,处理 Elapsed 事件的方法会在系统线程池中的一个线程上调用
于 2013-08-30T07:58:17.023 回答
2
System.Timers.Timer
有一个SynchronizingObject属性,您可以将其设置为将事件编组到 UI 线程。将其设置为表单。那是:
System.Timers.Timer Timer1 = new System.Timers.Timer();
Timer1.SynchronizingObject = this;
// add other Timer initialization here
于 2013-08-30T13:44:30.337 回答