【发布时间】:2013-05-01 01:55:14
【问题描述】:
我遇到了一些我不明白为什么会发生的问题。 这是一个简单的例子:
class ConsoleApp
{
static void Main(string[] args)
{
Thread workThread = new Thread(ThreadProc);
//Console.WriteLine("Starting"); // uncomment this
workThread.Start();
Console.ReadKey(true); // first ReadKey
Console.ReadKey(true); // second ReadKey
}
static void ThreadProc()
{
Console.WriteLine("ThreadProc started");
Random rnd = new Random();
for (int i = 0; i < 5; i++)
{
int timeout = rnd.Next(500, 1000);
Thread.Sleep(timeout);
Console.WriteLine("ThreadProc {0} slept {1} ms", i, timeout);
}
}
}
当我运行它时,直到我按下某个键(在第一个 ReadKey 之后),workThread 才会启动。如果我取消注释第一个 Console.WriteLine,workThread 会立即启动。
谁能解释这种行为?
【问题讨论】:
-
我复制了你的代码并尝试了这个,但是线程立即启动,不管评论或取消评论该行。
-
我不能重复这个。这是在什么环境下运行的?
-
Alexander,尝试将
Console.ReadKey替换为System.Windows.Forms.Application.Run(new Form()); -
谢谢,stackoverflow.com/questions/15143931/… 中的答案解释了一切。我尝试使用 Debug.WriteLine() 并看到该线程实际上已启动,但 Console.WriteLine 锁定了执行。
标签: c# .net multithreading