程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#子線程創建新窗體心得(對Windows窗體控件進行線程安全調用)

C#子線程創建新窗體心得(對Windows窗體控件進行線程安全調用)

編輯:C#入門知識

自己在寫socket通訊碰到這樣的問題:

除主UI線程外,有一個後台socket監聽線程一直在監聽新消息,新消息到來後,右下角彈出一個新窗口提醒用戶。

如果用監聽線程創建並彈出窗體的話,由於監聽線程一直處於阻塞監聽狀態,沒功夫處理UI方面的東西,所以新彈出的窗口會卡死在那裡。


解決方法:

應該在主UI線程上創建窗體,通過主線程裡面的一個窗體或控件調用Invoke()方法,讓創建和顯示窗體的代碼在主UI線程上執行,

       //定義一個委托  MessageEntity是消息實體類
        delegate void ShowMessageCallback(MessageEntity message);

        //委托方法
        private void ShowMessageSmall(MessageEntity message)
        {         
 
        //右下角消息框Form
        MessageSmall ms = new MessageSmall(message);             
         ms.Show();          
        }
       //調用委托
        private void show(MessageEntity message)
        {
          //創建委托
           ShowMessageCallback wt = new ShowMessageCallback(ShowMessageSmall);
           //這段代碼在主窗體類裡面寫著,this指主窗體
           this.Invoke(wt, new Object[] { message });
        }
監聽線程監聽到有消息過來後,只需要調用show方法,傳一個消息實體進去就可以通過主UI線程來創建新窗口了。

另外還可參考MSDN文檔:

http://msdn.microsoft.com/zh-cn/library/ms171728%28v=vs.80%29.aspx

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved