在子线程中创建新的窗体,遇到的问题。
場(chǎng)景:
服務(wù)端的應(yīng)用程序創(chuàng)建了一個(gè)線程來(lái)接收客戶端發(fā)來(lái)的消息,當(dāng)接收到消息后,需要彈出一個(gè)新的窗體,作為響應(yīng)操作等。
現(xiàn)象:
新創(chuàng)建的窗體呈現(xiàn)掛起、假死,或者一閃而過(guò)的現(xiàn)象。
原因:
新創(chuàng)建的響應(yīng)窗體是由子線程創(chuàng)建的,而.net平臺(tái)下,子線程執(zhí)行完畢后,會(huì)自動(dòng)釋放資源,同樣的,這個(gè)新創(chuàng)建的窗體也會(huì)被釋放掉。若是這個(gè)線程處于監(jiān)聽(tīng)或者一些其他的連續(xù)執(zhí)行狀態(tài),那么,這個(gè)窗體就會(huì)出現(xiàn)假死狀態(tài)。
解決方案:
可以在子線程中調(diào)用一個(gè)代碼段,而這個(gè)代碼段通過(guò)invoke方法回答主線程中去創(chuàng)建和現(xiàn)實(shí)Form2,這樣,子線程完成后,Form2就不會(huì)被釋放掉,因?yàn)樗鼘儆谥骶€程。
示例代碼:
(示例一)
1 //this表示主窗口的類 2 this.Invoke((MethodInvoker)delegate 3 { 4 f = new Form2(); 5 f.Show(); 6 });(示例二)
1 //也可以這樣寫(xiě) 2 new Thread((ThreadStart)delegate 3 { 4 Application.Run(new Form2()); 5 }).Start();?
轉(zhuǎn)載于:https://www.cnblogs.com/likeli/p/4707327.html
總結(jié)
以上是生活随笔為你收集整理的在子线程中创建新的窗体,遇到的问题。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: DP专题
- 下一篇: unity3d 随机生成地形之随机山脉