目前我在 Callaback 过程中有一个 For 循环:
private void InitializeComponent()
{
var timer = new System.Threading.Timer(TimerProc, null, 60000, 60000);
}
public void TimerProc(object state)
{
for (int i = 0; i <= 6; i++)
{
//Do something here
}
}
TimerProc 只触发一次,尽管我将它设置为每 60000 毫秒重复一次。看起来循环内的操作在第一次完成后不再执行。
但是,如果我删除 For 循环并执行一些其他操作,例如打印到控制台行或写入文本文件,则 TimerProc 会按预期重复。
为什么会出现这种情况,为什么回调过程中的循环会在初始触发后阻止它执行?
我通过使用 while(true) 无限循环并使用 Thread.Timer 在 x 毫秒后暂停进程来解决问题。
我的带有 while 循环的新可视化代码如下所示:
private void InitializeComponent()
{
processthread = new Thread(new ThreadStart(DoSomething));
processthread.Start();
}
public void DoSomething()
{
while(true)
{
for (int i = 0; i <= 6; i++)
{
//do something here
}
Thread.Sleep(5000);
}
}
我只想知道为什么 System.Thread.Timer 中的回调过程不能处理循环。
干杯,
斯坦利