5

我用来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% 完成时出现。

有什么选择吗?

4

3 回答 3

1

我知道这是一项很少出现的任务,但我有类似的事情并决定尝试一些技巧。

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

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

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

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

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"); 
    }
}
于 2013-08-20T17:14:05.343 回答
0

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

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

于 2013-08-03T18:58:23.973 回答
0

您可以首先构建接收参数并将其写入控制台的控制台应用程序。将它放在主应用程序开始的地方。在主应用程序中,您可以先终止进程,然后使用新参数重新打开它。
这是另类的方式。

于 2019-01-11T09:29:04.123 回答