在控制台关闭时阻止应用程序退出

本文关键字:应用程序 退出 控制台 | 更新日期: 2023-09-27 18:26:30

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

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

编辑

完成百分比的更新是我想在控制台中显示的

    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%完成时才会出现。

有其他选择吗?

在控制台关闭时阻止应用程序退出

我知道这是一个很少弹出的任务,但我也有类似的事情,并决定使用一些技巧。

http://social.msdn.microsoft.com/Forums/vstudio/en-US/545f1768-8038-4f7a-9177-060913d6872f/disable-close-button-in-console-application-in-c

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

您的文本框解决方案也应该有效。这听起来很像你从主线程调用一个函数,这个函数正在占用主线程上的表单,在更新文本框时会让你感到悲伤。考虑创建一个新线程和一个事件处理程序来更新您的文本框,或者使用新线程中的invoke methodinvoker来更新文本框。以下链接来自已回答的关于如何完成此操作的问题。

如何从另一个线程更新主线程中的文本框?

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"); 
    }
}

请参阅此处的答案。如答案中所述,存在no way to stop the application from getting closed.

但作为一种变通方法,您可以在其中一个答案中描述您的own text output solution

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