WinForms中的计时器Tick事件和线程

时间:2012-10-08 07:21:53

标签: c# winforms multithreading timer thread-safety

我有一个名为SendTimer的计时器,间隔为30秒。

protected void SendTimer_Tick(object sender, eventArgs e)
{
      SendTimer.Enabled = false;

      TransferMoney();

      System.Threading.Thread.Sleep(15000);

      GenerateTransactions();

      SendTimer.Enabled = true;
}

我希望一个线程能够同时正确调用tick事件。不是同时由2个线程。但正如我在我的LOGS中看到的那样,它似乎被一个线程调用,而另一个线程正在运行。任何的想法?因为我分别禁用和启用它。

1 个答案:

答案 0 :(得分:3)

根据定义,Windows窗体Timer是单线程的。它没有多线程,因为它通过WM_TIMER消息过去,被发送到当前的GUI线程消息队列。

所以,这个:

  

不是同时使用2个线程

是不正确的,因为即使你有几个线程,WinForms Timer也与此无关。