【问题标题】:C# Thread synchronization (waiting executing)C#线程同步(等待执行)
【发布时间】:2011-03-20 08:14:08
【问题描述】:

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

我调用 ShowDialog 是因为我想停止执行主程序。

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

【问题讨论】:

  • 你能解释一下你想要完成什么吗?听起来您正在做一个多线程应用程序,并且需要控制线程执行。有诸如互斥锁和信号量之类的机制可以做到这一点。
  • hm.. 我都在解释问题,可能是我的英语很差
  • 我的问题不清楚...
  • 对我来说非常困惑的问题。你能做一些更好的解释。写伪代码什么的。

标签: c# multithreading synchronization


【解决方案1】:

您需要读取线程同步。要停止执行代码,请使用 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(),或者使用EventResetMode.AutoReset 选项创建EventWaitHandle(阅读更多MSDN)。

【讨论】:

    猜你喜欢
    • 2021-01-02
    • 2015-08-23
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    相关资源
    最近更新 更多