有人可以告诉我以下代码有什么问题吗?理想情况下,它应该首先启动一个线程,然后等待设置事件。相反,它不会启动线程,只会卡在 WaitOne() 上。
我很想知道线程发生了什么,为什么?
class Program
{
static void Main(string[] args)
{
Testing t = Testing.Instance;
Console.Read();
}
}
class Testing
{
private static AutoResetEvent evt = new AutoResetEvent(false);
public static Testing Instance = new Testing();
private Testing()
{
Create();
evt.WaitOne();
Console.WriteLine("out");
}
private void Create()
{
Console.WriteLine("Starting thread");
new Thread(Print).Start();
}
private void Print()
{
Console.WriteLine("started");
evt.Set();
}
}
编辑: 到目前为止,@BrokenGlass 提供的描述是有道理的。但是将代码更改为以下代码允许另一个线程可以访问实例方法而无需完成构造函数。(@NicoSchertler 建议)。
private static Testing _Instance;
public static Testing Instance
{
get
{
if (_Instance == null)
_Instance = new Testing();
return _Instance;
}
}