2011-03-20 149 views
1

是否可以调用ShowDialog(),但在主窗体下创建对话窗口,而不是在顶端?C#线程同步(等待执行)

我打电话给ShowDialog,因为我想停止执行主程序。

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

+0

你能解释一下你试图完成什么吗?这听起来像你正在做一个多线程的应用程序,并需要控制线程执行。有这样的机制,例如互斥体和信号量。 – user623879 2011-03-20 08:15:09

+0

嗯..我所有的解释有问题,可能是我的英语很差 – kusanagi 2011-03-20 08:16:53

+1

问题不清楚给我... – 2011-03-20 08:17:15

回答

2

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

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

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(),或者使用EventResetMode.AutoReset选项创建EventWaitHandle(详情请参阅MSDN)。