我试图在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已关闭。我不确定如何解决这个问题,因为我认为代码会在继续之前执行计时器,除非我不理解它是如何执行计时器的。
答案 0 :(得分:1)
您必须注意在dlay启动后关闭Stream,因此当Tick发生时,Stream将关闭。当Stream的工作完成时,尝试关闭匿名委托内的Stream。
请原谅我糟糕的英语。我希望我能帮助你。