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

时间:2013-08-03 18:36:48

标签: c# winforms console

我使用AllocConsole()在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%完成时出现。

任何替代方案?

3 个答案:

答案 0 :(得分:1)

我知道这是一项很少出现的任务,但我有类似的东西,并决定与几个黑客一起去。

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

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

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

How to update textboxes in main thread from another thread?

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

答案 1 :(得分:0)

请参阅here上的答案。如答案中所述,有no way to stop the application from getting closed.

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

答案 2 :(得分:0)

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