2011-03-07 90 views
0

關於Windows窗體如何保持其執行狀態的任何想法,除非我們明確地敲擊關閉[X]標記。控制檯應用程序不是這種情況嗎?Windows窗體VS控制檯應用程序

我想知道這是如何由.NET內部管理的?

在此先感謝

回答

0

爲了獲得這種差異,我相信你應該讀些關於Windows MessagesMessages Queue,Message loop等)的內容。例如here。 .Net在這裏並沒有帶來任何新東西,它更多的是關於Windows應用程序本身。

0

你弄錯了:一個Windows窗體程序只有在執行過程中保持和不保持後。它僅在退出程序後停止執行,例如通過單擊關閉[X]按鈕。

你的意思是問控制檯和Windows應用程序之間有什麼不同,以及爲什麼從命令行啓動時它們的執行方式有所不同?這由(PE)可執行頭中的標誌控制,該標頭由連接器的/ subsystem:console或/ subsystem:windows選項設置。在我看來,這是完全瘋狂的方法; Unix使用更合乎邏輯的方法(用戶可以指定自己是否等待shell)。

這對於.NET和本機可執行文件都是一樣的。

+0

請容忍我,如果我錯了,但我看到的形式仍然存在。對於例如我創建一個Windows窗體應用程序,並拖放一個按鈕到窗體上。在按鈕的點擊事件上,我寫了一些東西。執行後,表單仍然存在。一旦主控功能完成,控制檯也會結束。 – Nishant 2011-03-07 15:17:43

+0

是的,因爲主要功能仍在運行。它與按鈕後面的功能不同。主函數包含一個事件循環,用於處理來自表單按鈕和關閉/最小化/等的消息。按鈕,並且一旦它看到WM_QUIT消息就退出,例如當關閉按鈕被點擊時。按照Snowbear的答案中的鏈接。 – gpvos 2011-03-07 15:31:35

0

那麼WinForms的代碼不僅僅是你輸入的內容。它們不會關閉寫入,因爲代碼處於一個不斷檢查事件的循環中,並且如果觸發事件Close,它們將關閉。

試想一下,你在你的控制檯應用程序代碼是這樣的:

while(true) 
{ 
    Console.WriteLine("Enter a Number: "); 
    int x; 
    Console.Read(X); 

    if(x==-1) break; 
    Console.Write(x*x); 

} 

的循環將永遠重複,直到輸入-1,你可以說,類似的東西去與WinForms的。當然,這是一種過度簡單化,但想象一下這樣的事情。

如果您想了解更多,你應該考證一下Windows Messages (Messages Queue, Message loop作爲Snowbeard說

相關問題