C#Timer:在周期性任务运行时将间隔更改为无限

时间:2018-05-21 16:56:17

标签: c# timer intervals

我想知道如果我将定时器间隔设置为无限,而定时器处于活动状态会发生什么。如果在我将间隔设置为无限时运行周期性任务会发生什么?它会阻止吗?调用stop method()并在需要时再次调用start更好吗?

我正在定期向StreamWriter写入数据,我在定时器执行的周期性任务中使用相同的流编写器,并在我的代码的另一个地方使用(在两个地方我都将代码与锁同步)同一个对象)。如果我在周期性任务上注释代码(将其留空)一切都很顺利,但是当我让它运行时,周期性任务之外的代码正在写入流编写器并被阻止。似乎流编写器无法从写入行方法返回。我认为将定时器间隔设置为inifinite会导致此问题。

定期任务:

lock(object)
{
    sw.WriteLine("@@@")
}

另一个主题:

timer.Change(Timeout.Infinite, Timeout.Infinite);
lock(object)
{  sw.WriteLine("@@@") //Thread is blocking here when the code in the timer delegate is executed.
}

我认为timer.Change可能导致计时器线程将sw保持在非一致状态,因此在更改间隔后调用WriteLine永远不会结束执行

顺便说一下,流编写者正在写两个不同进程之间的管道,但我不认为这个方案很重要

谢谢

0 个答案:

没有答案