Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#计时器:在周期性任务运行时,将间隔更改为无限_C#_Timer_Intervals - Fatal编程技术网

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

C#计时器:在周期性任务运行时,将间隔更改为无限,c#,timer,intervals,C#,Timer,Intervals,我想知道当计时器处于活动状态时,如果我将计时器间隔设置为INIFIME,会发生什么。如果在我将间隔设置为INIFIENT时周期性任务正在运行,会发生什么情况?是街区吗?调用stop method()并在需要时再次调用start是否更好 我定期向StreamWriter写入数据,我在计时器执行的定期任务中使用相同的StreamWriter,并在代码的另一个位置(在这两个位置,我将代码与同一对象的锁同步)。如果我在周期性任务上注释代码(将其保留为空),一切都会正常进行,但当我让它运行时,周期性任务之

我想知道当计时器处于活动状态时,如果我将计时器间隔设置为INIFIME,会发生什么。如果在我将间隔设置为INIFIENT时周期性任务正在运行,会发生什么情况?是街区吗?调用stop method()并在需要时再次调用start是否更好

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

定期任务:

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可能会导致计时器线程使软件处于不一致的状态,因此更改间隔后对WriteLine的调用永远不会结束执行

顺便说一下,流编写器正在向两个不同进程之间的管道写入数据,但我认为这在这个场景中并不重要


谢谢你

如果我能很好地理解你的情况,我相信你会想到责任分离和并行。我不知道你说的“责任分离”是什么意思。我将更好地描述提议:当我在周期性任务之外写入一些数据时,我不希望周期性任务发送数据,因此我临时将间隔更改为无限。我想用锁就足够了(我现在不能试,因为我现在不在工作)。所以我想知道动态更改间隔是否会导致周期委托方法突然停止,或者它会让它按预期完成