在子线程中创建新的窗体,遇到的问题。
生活随笔
收集整理的這篇文章主要介紹了
在子线程中创建新的窗体,遇到的问题。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
場景:
服務端的應用程序創建了一個線程來接收客戶端發來的消息,當接收到消息后,需要彈出一個新的窗體,作為響應操作等。
現象:
新創建的窗體呈現掛起、假死,或者一閃而過的現象。
原因:
新創建的響應窗體是由子線程創建的,而.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();?
轉載于:https://www.cnblogs.com/likeli/p/4707327.html
總結
以上是生活随笔為你收集整理的在子线程中创建新的窗体,遇到的问题。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DP专题
- 下一篇: unity3d 随机生成地形之随机山脉