【发布时间】:2014-12-02 21:34:32
【问题描述】:
当我在控制台窗口中使用滚动条时,所有线程和任务都会暂停。有什么方法可以防止这种情况发生吗?
示例:
Task.Run(async () =>
{
for (var z = 0; true; z++)
{
Console.WriteLine(z);
await Task.Delay(200);
}
});
或
var s = new Thread(() =>
{
for (var z = 0; true; z++)
{
Console.WriteLine(z);
Thread.Sleep(200);
}
});
如果您将这些代码示例中的任何一个作为控制台应用程序运行,它们都会执行相同的操作:打印一些数字。在执行期间,用鼠标左键按住滚动条一段时间,数字将停止出现。任务/线程已暂停。当您松开鼠标按钮时,数字将继续。
因为滚动条释放后的数字跟在前面的数字后面,所以控制台并没有简单地停止输出数字。它一直在 Console.WriteLine - 方法中等待,直到释放滚动条。
有人知道如何解决我的问题吗?
【问题讨论】:
-
您的程序只是因为您阻止了输出而暂停。 IE。如果程序没有调用,例如
Console.WriteLine(),它会一直运行得很好。事实上,任何不试图写入输出(stdout 或 stderr)的线程都将继续运行。所以,要么不要阻塞输出,要么运行重要的东西而不写入输出。
标签: c# multithreading console