2013-08-03 217 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"); 
    } 
} 
相關問題