Re: [心得] delegate();之心得

看板C_Sharp作者 (子凌(b))時間15年前 (2008/12/20 18:43), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《starlife672 (我愛秋愛我)》之銘言: : Control.CheckForIllegalCrossThreadCalls=false; (方法一) 這不是好作法,因為當發生問題時,怎麼死的都不知道 如果是經常性使用到的方法,例如幾秒鐘就會呼叫一次的話 建議建立一個實體 Delegate 來呼叫,而不是一直產生暱名 Delegate 我直接改在下面 : //(1).設定好委派事件 : private delegate void ControlDelegate(string id,object obj); private ControlDelegate _setStatusDelegate; // 宣告 Delegate 實體 public static void Main(string[] args) // 或是 Form_Load { _setStatusDelegate = new ContrlDelegate(this.SetStatusDelegate); ........ } : //(2).設定好讓Thread要叫用的方法 : public SetStatus(string id,object obj){ : this.invoke(new ContrlDelegate(this.SetStatusDelegate), : new object[]{id,obj}); 改成 this.invoke(_setStatusDelegate, id, obj); 另外 invoke 方法的第二參數是 params object[] 所以不需要 new object[] 詳細請見 params 關鍵字的說明 : //(3).真正執行方法的地方 : private SetStatusDelegate(string id,object obj){ : if(id.Equals("Message")){ : this.label1.Text = (string)obj; : } : else if(id.Equals("FileInfo")){ : FileInfo info = (FileInfo)obj; : } : } : 到時候我只要在Thread中,透過SetStatus("Message","Starlife是帥哥"); : 就ok了 -- my blog: http://kenshinnn.blogspot.com operation system : Ubuntu GNU/linux window manager : Gnome -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.117.167.161
文章代碼(AID): #19JCnl3v (C_Sharp)
文章代碼(AID): #19JCnl3v (C_Sharp)