我使用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%完成时出现。
任何替代方案?
答案 0 :(得分:1)
我知道这是一项很少出现的任务,但我有类似的东西,并决定与几个黑客一起去。
- 禁用自定义控制台应用程序上的“关闭”按钮。
你的文本框解决方案应该也可以。这听起来很像你从主线程中调用一个函数,它正在占用主线程上的形式,并且在更新文本框时会让你感到悲伤。考虑创建一个新线程和一个事件处理程序来更新文本框,或者使用新线程中的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)
您可以首先构建接收参数的控制台应用程序并将其写入控制台。将其放在主应用程序启动的位置。
在主应用程序中,您可以先终止进程,然后使用新的参数将其重新打开。
这是替代方法。