如何在同一个线程上调用system.threading.timer?

时间:2015-03-15 04:40:39

标签: c#

每当我在表单上切换一些内容时,我会通过执行(调用被切换的内容)来重新启动我的线程:

Retriever.Dispose();
Retriever = new System.Threading.Timer(CallPictureBoxRetriever, null, 0, 300000);

问题是这还在创建另一个线程并关闭前一个线程!

我问我如何在创建的同一个线程上调用CallPictureBoxRetriever(Object state),因此我不必总是处理/重新创建一个线程;而是有一个线程。

2 个答案:

答案 0 :(得分:2)

只需重置计时器:

Retriever.Change(0, 300000); // reset to 300 seconds

第一个参数是 dueTime

  

指定零(0)立即重启计时器。

其次是期间

  

指定的回调方法的调用之间的时间间隔   构造Timer时,以毫秒为单位。指定   Timeout.Infinite禁用周期性信令。

完整文档here

答案 1 :(得分:1)

就个人而言,我会创建一个等待autoresetevent的线程,超时为30秒。然后让你的代码在你希望它立即运行时设置autoresetevent。

https://msdn.microsoft.com/en-us/library/system.threading.autoresetevent%28v=vs.110%29.aspx