文本编写器已在延迟计时器中关闭"勾选"事件

时间:2014-10-17 15:09:23

标签: c# timer

我试图在Windows窗体上使用延迟计时器。我想避免Thread.Sleep,因为我希望控件在延迟期间处于活动状态。现在我有一个按钮,可以在点击时启动代码。它打开一个流并将标题行写入csv。然后我委托计时器勾选如果选中复选框,它将停止计时器,否则它会写一个新行。之后,计时器启动。在计时器执行之后,编写器才会关闭。所以,像,

FileStream myData = File.OpenWrite("myfile.csv");
TextWriter myWriter = new StreamWriter(myData);
myWriter.Write("Titles,Go,Here\n");
int x = 0;
delayTimer.Tick+=
delegate
{
    if (checkBox.Checked)
    {
        delayTimer.Stop();
    }
    myWriter.Write(x+"stuff\n");
    x++;
};
delayTimer.Start();
myWriter.Close();

但是,每当我尝试执行时,它会在按下按钮后冻结,Visual Studio会通知我StreamWriter已关闭。我不确定如何解决这个问题,因为我认为代码会在继续之前执行计时器,除非我不理解它是如何执行计时器的。

1 个答案:

答案 0 :(得分:1)

您必须注意在dlay启动后关闭Stream,因此当Tick发生时,Stream将关闭。当Stream的工作完成时,尝试关闭匿名委托内的Stream。

请原谅我糟糕的英语。我希望我能帮助你。