天天看點

C# 線程 winform Show和ShowDialog

最近開發消息提醒時,遇到關于Form的Show和ShowDialog的使用問題。

說明:在多線程中收到消息後彈出提示框,提示框使用Form進行設計。

問題點描述:

1、Show:添加的控件都顯示不出來,出現的效果如下圖:

C# 線程 winform Show和ShowDialog

解決:首次解決時,調用Show()之後調用Update()即可顯示,但是界面仍然是死的。

第二次解決,要通過Invoke才行,且不用調用Update,代碼示例:

this.Invoke(new Action(() =>

{

Form form = new Form();

form.Show();

}));

原因:UI線程和工作線程,工作線程無法直接更新UI界面上的控件。

2、ShowDialog:能正常彈出提示框,也能對其進行操作。

a、接收到消息時不顯示彈出框,解決方法是在Form的Load事件中調用Activate()激活。

b、隻有關閉目前的提示框才能顯示下一個提示框,無法同時顯示。

原因:So Easy,ShowDialog是阻塞線程的,線程要等待Dialog的傳回值。

本人采取的是第一種方式,需求是隻需提示資訊,是以第一種更适合。

PS:關于Show和ShowDialog更詳細的說明請參考文章http://blog.csdn.net/hellowangxyue/article/details/51346248