在子執行緒中建立新的窗體,遇到的問題。
場景:
服務端的應用程式建立了一個執行緒來接收客戶端發來的訊息,當接收到訊息後,需要彈出一個新的窗體,作為響應操作等。
現象:
新建立的窗體呈現掛起、假死,或者一閃而過的現象。
原因:
新建立的響應窗體是由子執行緒建立的,而.net平臺下,子執行緒執行完畢後,會自動釋放資源,同樣的,這個新建立的窗體也會被釋放掉。若是這個執行緒處於監聽或者一些其他的連續執行狀態,那麼,這個窗體就會出現假死狀態。
解決方案:
可以在子執行緒中呼叫一個程式碼段,而這個程式碼段通過invoke方法回答主執行緒中去建立和現實Form2,這樣,子執行緒完成後,Form2就不會被釋放掉,因為它屬於主執行緒。
示例程式碼:
(示例一)
1 //this表示主視窗的類 2 this.Invoke((MethodInvoker)delegate 3 { 4 f = new Form2(); 5 f.Show(); 6 });
(示例二)
1 //也可以這樣寫 2 new Thread((ThreadStart)delegate 3 { 4 Application.Run(new Form2()); 5 }).Start();
相關文章
- 子執行緒使用父執行緒RequestScope作用域Bean問題的探究執行緒Bean
- parallelStream中的執行緒安全問題Parallel執行緒
- 在windows殺oracle執行緒的問題WindowsOracle執行緒
- 在非主執行緒中建立視窗執行緒
- 執行緒中斷以及執行緒中斷引發的那些問題執行緒
- 子執行緒 UI 問題捉蟲執行緒UI
- 老問題:Android子執行緒中更新UI的3種方法Android執行緒UI
- lambda中stream執行緒安全的問題執行緒
- 模板方法中的執行緒安全問題執行緒
- j2me多執行緒遇到問題執行緒
- air在go的其他版本上執行可能遇到的問題AIGo
- JUC之集合中的執行緒安全問題執行緒
- performSelector:withObject:afterDelay: 在子執行緒中呼叫不執行performSelectorObject執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 執行docker run所遇到的問題Docker
- 請教個問題執行 httprunner 遇到的問題HTTP
- ArrayList 的執行緒安全問題執行緒
- 問題:執行緒的終止執行緒
- 關於執行緒的問題...執行緒
- 多執行緒鎖的問題執行緒
- 多執行緒中的使用共享變數的問題執行緒變數
- 執行緒問題執行緒
- Spring中多執行緒的使用及問題Spring執行緒
- (MFC)子執行緒的資料如何傳遞給主執行緒中?執行緒
- 所謂的執行緒安全問題執行緒
- 執行緒池的設計問題執行緒
- Fragstas軟體使用中遇到的問題
- 多執行緒-執行緒安全問題的產生原因分析以及同步程式碼塊的方式解決執行緒安全問題執行緒
- 一個問題——在MDI窗體中新增控制元件後顯示子窗體控制元件
- java多執行緒執行問題Java執行緒
- 多執行緒問題執行緒
- 多執行緒程式設計,處理多執行緒的併發問題(執行緒池)執行緒程式設計
- 模擬主執行緒等待子執行緒的過程執行緒
- 子執行緒與UI執行緒的通訊(委託)執行緒UI
- 在執行時顯示或隱藏窗體的標題欄 (轉)
- 探究Spring中Bean的執行緒安全性問題SpringBean執行緒
- Java程式設計師面試中的多執行緒問題Java程式設計師面試執行緒
- 多執行緒下的程式同步(執行緒同步問題總結篇)執行緒