2013-08-03 152 views
5

我使用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

你的意思是接近使用'X'button? –

+0

是控制台上的x按钮 –

+0

您无法停止或禁用该按钮。您可以使用SetConsoleCtrlHandler()获取通知,但ExitProcess()调用始终在此之后生成。如果你买不起,请不要使用控制台。 –

回答

0

请参阅here以上的答案。正如答案中提到的那样,有no way to stop the application from getting closed.

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

1

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

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

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

你的文本框解决方案应该也可以。这听起来很像你从主线程中调用一个函数,这个函数绑定了也在主线程中的表单,并且在更新文本框时导致了你的悲伤。考虑创建一个新的线程和一个事件处理程序来更新您的文本框,或者使用新线程中的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"); 
    } 
} 
相关问题