C#线程同步(等待执行)

时间:2011-03-20 08:14:08

标签: c# multithreading synchronization

是否可以调用ShowDialog(),但是要在主窗体下创建对话框窗口,而不是在顶部?

我正在调用ShowDialog,因为我想停止执行主程序。

我不需要对话框窗口,因为我会从线程创建许多对话框,它们会相互阻止。

1 个答案:

答案 0 :(得分:2)

您需要读取线程的同步。要停止执行代码,请使用EventWaitHandle对象。

而不是创建和显示WaitOne()的对话框EventWaitHandle

private static EventWaitHandle ev;
//...
[MTAThread]
public static void Main()
{
    //...
    ev = new EventWaitHandle(false, EventResetMode.ManualReset);
    //...
    ev.WaitOne(); //Stop execution
    //...
}

//Another thread function.
public static void ThreadProc()
{
    //...
    ev.Set(); //Continue execution of Main
    //...
}

MSDN就是一个很好的例子。另请注意,您需要在再次使用阻止之前致电Reset()或使用EventWaitHandle选项创建EventResetMode.AutoReset(请参阅MSDN上的详情)。