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在处理控制台的关闭事件后,是否有可能通过调用OPFreeConsole
将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");
}
}