C#中的定时器和多线程

本文关键字:多线程 定时器 | 更新日期: 2023-09-27 18:29:33

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

C#中的定时器和多线程

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

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

System.Timers.Timer有一个SynchronizingObject属性,您可以将其设置为将事件封送至UI线程。将其设置为Form。即:

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