【问题标题】:How to delay the StreamWriter loop?如何延迟 StreamWriter 循环?
【发布时间】:2015-05-17 04:52:39
【问题描述】:

我正在尝试使用this newbie-handy 控制台“输出器”。当我尝试对其应用循环时,如果尝试使用延迟,它要么会在输出文件中产生大量行,要么根本不工作。我的问题的极其简化的版本:
C#:

using (StreamWriter writer = new StreamWriter())
{
    Console.SetOut(writer); 
    while (true)
    {
        Console.WriteLine("1");
    }
}

我已经尝试了几乎所有可能的方法来延迟 1 秒(计时器、延迟、动作、睡眠)。在我应用 StreamWriter 之前,每个选项都可以正常工作。在循环内使用延迟没有任何作用 - 输出文件中的大量行“1”。在循环外使用延迟使输出文件为空。 “Try-Catch”什么也没说。各位大佬,问题出在哪里?也许 StreamWriter 不兼容延迟?

【问题讨论】:

  • I have tried almost every possible way to make a 1sec delay 显示您的代码...sscce.org
  • System.Threading.Thread.Sleep(1000) 不起作用?
  • Thread.Sleep(1000) 可能会做
  • @Dirk Trilsbeek 适用于控制台。使用 StreamWriter 在循环中应用它会保持输出文件为空。
  • @Rooger 我建议编辑答案并在那里显示代码。

标签: c# loops streamwriter


【解决方案1】:

只有当using 块结束时,您的文件才会被关闭和写入。之前,实际写入文件取决于您的操作系统和磁盘的缓存机制。

你的循环永远不会结束。您的文件可能永远不会被写入。请注意,您的循环可以正常终止,并且 using 块可以关闭文件。

【讨论】:

    【解决方案2】:

    您可以使用 Thread.Sleep 并指定要在循环内休眠的时间跨度。您还需要在某个时候终止循环,例如:

    using (StreamWriter writer = new StreamWriter("c:\\temp\\temp.txt"))
    {
        Console.SetOut(writer);
    
        for (int i = 0; i < 10; i++)
        {
            Thread.Sleep(TimeSpan.FromSeconds(1));
            Console.WriteLine("{0}: {1}", DateTime.Now.ToShortTimeString(), i);
        }
    }
    

    【讨论】:

    • 没错。问题出在非冲洗作家身上!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多