C# 在控制台关闭时防止应用程序退出

C# 在控制台关闭时防止应用程序退出,c#,winforms,console,C#,Winforms,Console,我使用alloconsole()在winform应用程序中打开控制台 当控制台关闭时,如何防止应用程序退出 编辑 completionpercentage的不时更新是我希望在控制台中显示的内容 void bkpDBFull_PercentComplete(object sender, PercentCompleteEventArgs e) { AllocConsole(); Console.Clear(); Console.Writ

我使用
alloconsole()
在winform应用程序中打开控制台

当控制台关闭时,如何防止应用程序退出

编辑

completionpercentage的不时更新是我希望在控制台中显示的内容

    void bkpDBFull_PercentComplete(object sender, PercentCompleteEventArgs e)
    {
        AllocConsole();
        Console.Clear();
        Console.WriteLine("Percent completed: {0}%.", e.Percent);
    }
我尝试了richtextBox作为替代

       s =(e.Percent.ToString());
       richTextBox1.Clear();
       richTextBox1.AppendText("Percent completed:  " +s +"%");
但我看不到每次更新的完成百分比。它仅在100%完成时出现

有其他选择吗?

请参阅上面的答案。如回答中所述,
无法阻止应用程序关闭。


但是作为一种解决方法,您可以在其中一个答案中描述您自己的
文本输出解决方案。

我知道这是一项很少弹出的任务,但我有一些类似的东西,并决定进行一些破解

-禁用自定义控制台应用程序上的“关闭”按钮

您认为文本框解决方案也应该有效。这听起来很像是你从主线程调用一个函数,这个函数占用了同样在主线程上的表单,并且在更新文本框时给你带来了麻烦。考虑创建一个新线程和事件处理程序来更新您的文本框,或者使用新线程中的调用方法调用器来更新文本框。下面的链接来自已回答的关于如何完成此操作的问题


您可以首先构建接收参数并将其写入控制台的控制台应用程序。将其放置在主应用程序启动的位置。 在主应用程序中,您可以先终止进程,然后使用新参数重新打开它。

这是祭坛的方式

您的意思是使用
X
按钮关闭?是的,控制台上的X按钮无法停止或禁用。您可以使用SetConsoleCtrlHandler()获得通知,但ExitProcess()调用总是在该通知之后进行。如果您负担不起,请不要使用控制台。@HansPassant在处理控制台的关闭事件后,是否有可能通过调用OP
FreeConsole
将WinForm应用程序与控制台分离?或者ExitProcess会首先被调用吗?不是之后,它必须在回调中完成。不知道这是否可行,应该有人尝试一下:)可能性不大,您可能希望Windows增加句柄上的引用计数。
public class MainForm : Form {
    public MainForm() {
        Test t = new Test();

        Thread testThread = new Thread((ThreadStart)delegate { t.HelloWorld(this); });
        testThread.IsBackground = true;
        testThread.Start();
    }

    public void UpdateTextBox(string text) {
        Invoke((MethodInvoker)delegate {
            textBox1.AppendText(text + "\r\n");
        });
    }
}

public class Test {
    public void HelloWorld(MainForm form) {
        form.UpdateTextBox("Hello World"); 
    }
}