【问题标题】:Text Writer is already closed in a Delay Timer "Tick" Event文本编写器已在延迟计时器“滴答”事件中关闭
【发布时间】:2014-10-17 15:09:22
【问题描述】:

我正在尝试在 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 已关闭。我不太确定如何解决这个问题,因为我认为代码会在继续之前执行计时器,除非我只是不明白它是如何执行计时器的。

【问题讨论】:

标签: c# timer


【解决方案1】:

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

请原谅我的英语不好。希望对你有所帮助。

【讨论】:

  • 我实际上是在发布问题后几分钟(在尝试了几个小时后)才发现的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多