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