gpt4 book ai didi

c# - Environment.Exit() 导致我的应用程序在使用 Process.Start 后崩溃

转载 作者:行者123 更新时间:2023-11-30 16:32:38 34 4
gpt4 key购买 nike

我有一个小表单,它创建两个后台工作线程,它们监听来自两个独立服务器进程的消息。当用户试图关闭表单时,我处理 OnFormClosing 事件(或者他们可以单击“退出菜单项”),该事件在两个线程上调用 CancelAsync()。然后,在调用 Environment.Exit(0) 之前,表单会等待两个线程的 IsBusy 属性都为“FALSE”。

关键在于:用户可以从这个表单启动一个单独的应用程序。这是在单击特定按钮时使用 Process.Start 完成的。如果用户通过表单创建了一个新进程,然后关闭了表单,它没有正常退出,而是崩溃了,我收到了这些窗口错误消息之一。 Application.Exit 不起作用,因为它不会出于某种我不知道的原因关闭表单。我确定两个线程都已完成执行,因为我处理了两个线程的 RunWorkerCompleted 事件。这是核心代码的外壳:

private void startProcess_buttonClick(sender, e)
{
Process.Start(<process args>);
}


protected override OnFormClosing()
{
e.Cancel = true;

if (!thread1.IsBusy && !thread2.IsBusy)
Environment.Exit(0);

stopThreads();
}
private void stopThreads()
{
if (thread1.IsBusy)
thread1.CancelAsync();

if (thread2.IsBusy)
thread2.CancelAsync();
}

private void thread1_RunWorkerCompleted(sender, e)
{
if (!thread2.IsBusy)
Environment.Exit(0);
}


private void thread2_RunWorkerCompleted(sender, e)
{
if (!thread1.IsBusy)
Environment.Exit(0);
}

关于什么会导致 Environment.Exit 崩溃的任何想法?

最佳答案

尝试

Application.Exit()

因为您运行的是 Windows 窗体。我自己没有做过测试用例,但我很确定 Winforms API 对通过使用内核 API 的环境立即终止进程不满意

我还发现了这个:http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

关于c# - Environment.Exit() 导致我的应用程序在使用 Process.Start 后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3898150/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com