作者kenshinn (子凌(b))
看板C_Sharp
标题Re: [心得] delegate();之心得
时间Sat Dec 20 18:43:56 2008
※ 引述《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