FormBrowser form = new FormBrowser();
SVC.formBrowser = form;
Application.Run(form);
Console.WriteLine("123");
代碼如上,我手動關閉FormBrowser 視窗,就是點右上角的叉號關閉表單,Console.WriteLine("123")正常執行
但是如果在表單里this.close(), 程式不會執行Console.WriteLine("123"); 就卡住了.下面的代碼不會執行是為啥?
uj5u.com熱心網友回復:
實體都已經銷毀了,如何再打開呢?你需要再次實體化才可以。你應該將application.run(form)改成form.ShowDialog();uj5u.com熱心網友回復:
Application.Run() 這是 winform 標準的主程式(Main 主執行緒)阻塞陳述句,windows 的跨視窗系統訊息都發給這個阻塞著的系統主視窗。這一句的“法律”就是阻塞。uj5u.com熱心網友回復:
對于 winform 主視窗的 this.Close 是完全可以通過的,除非你自己額外寫了代碼進行了什么其它操作。但是假設啟動的就不是控制臺程式,那么找不到 Console,行程在運行時是會崩潰的。如果創建控制臺程式(注意不是 windows 視窗程式),主程式應該是類似這樣的代碼:
var f= new Form1();
f.Show();
Console.WriteLine("系統進入Pending狀態.....");
Task.Run(async () =>
{
while (true)
{
await Task.Delay(10000);
}
}).Wait();
使得控制臺主程式阻塞,但是又能允許windows視窗接收windows訊息。
或者你創建一個控制臺行程(注意仍然是控制臺行程),你使用 Application.Run(.....) 這里加載一個“不可見視窗”,這個視窗僅僅控制在 windows 的狀態欄圖示區域(就是QQ圖示的所在的那個地方)產生一個“右鍵”控制選單,這樣windows 視窗能接收windows訊息,同時你在視窗中向 Console 輸出的代碼能在單獨的控制臺視窗中顯示,這樣的輸出才有實際意義。否則就如 #1 樓所說,你寫了一個一般人不去使用的邏輯設計。
uj5u.com熱心網友回復:
幫頂!!!!!!!轉載請註明出處,本文鏈接:https://www.uj5u.com/net/29719.html
標籤:C#
上一篇:求推薦新版的c#書籍
下一篇:VCT格式檔案轉SHP
