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

发布于 2024-10-23 21:55:30 字数 129 浏览 0 评论 0原文

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

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

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

Is it possible to call ShowDialog(), but to create dialog window under main form, not on the top?

I'm calling ShowDialog because I want to stop executing the main program.

I don't need the dialog window, because I will create many dialogs from threads and they will prevent each other.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别再吹冷风 2024-10-30 21:55:30

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

不是创建并显示对话框,而是调用 EventWaitHandleWaitOne()

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)。

You need to read synchronization of threads. For stopping executing code use EventWaitHandle object.

Instead of creating and show dialog call WaitOne() of 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
    //...
}

A good example is on MSDN. Also note, that you need to call Reset() before using blocking again or create EventWaitHandle with EventResetMode.AutoReset option (read more on MSDN).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文