如何在线程中给委托方法里的方法传参数

  最近在优化我以前的项目时,需要在给原来的委托方法里的方法传递对象,而我要用这个对象来动态生成DataTable,运行时报错:“在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级”。

所以我再次声明一个委托,然后我在方法里再次使用多线程,在这个线程中启动另一个方法来完成我要的工作,然后再次委托给另一个方法来实现。

说的我自己都晕了。。。还是用代码来说话吧。
 1 None.gif public   delegate   void  data_1Callback(DataTable dataTable);    // 委托操作DATATABLE
 2 None.gif
 3 None.gifRemote.RemoteServer.UserCome  +=   new  Remote.UserComeHandler(RemoteServer_UserCome);
 4 None.gif这个是刚启动时线程里方法的又一委托。
 5 None.gif
 6 None.gif     public   void  RemoteServer_UserCome( object  o, string  user, string  userIP)
 7 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {                        stopThread();  //事先停止该线程
 8InBlock.gif            t = new Thread(new ThreadStart(BindDataGrid));
 9InBlock.gif            t.Start();
10InBlock.gif
11ExpandedBlockEnd.gif        }

12 None.gif
13 None.gif     void  stopThread()
14 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {
15InBlock.gif            if((t != null)&&(t.IsAlive))
16ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
17InBlock.gif                t.Abort();
18InBlock.gif                t.Join();
19ExpandedSubBlockEnd.gif            }

20InBlock.gif            t = null;
21ExpandedBlockEnd.gif        }

22 None.gif
23 None.gif public   void  BindDataGrid()
24 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {
25InBlock.gif            if(dtUser.Rows.Count < 1)
26ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
27InBlock.gif                ColId.DataType = System.Type.GetType("System.Int32");
28InBlock.gif                dtUser.Columns.Add("ID");
29InBlock.gif                ColDateTime.DataType = System.Type.GetType("System.String");
30InBlock.gif                dtUser.Columns.Add("上线时间");
31InBlock.gif                dtUser.Columns.Add("用户名");
32InBlock.gif                dtUser.Columns.Add("当前状态");
33InBlock.gif                dtUser.Columns.Add("退出时间");
34InBlock.gif                dtUser.Columns.Add("外网IP");
35InBlock.gif                dtUser.Columns.Add("内网IP");                
36ExpandedSubBlockEnd.gif            }

37InBlock.gif            count ++;
38InBlock.gif            DataRow dr = dtUser.NewRow();            
39InBlock.gif
40InBlock.gif            dr[0= count;
41InBlock.gif            dr[1= DateTime.Now.ToString();
42InBlock.gif            dr[2= userName;
43InBlock.gif            dr[3= "在线";
44InBlock.gif            dr[4= "";
45InBlock.gif            dr[5= NetIp;
46InBlock.gif            dr[6= WokIp;
47InBlock.gif            
48InBlock.gif            dtUser.Rows.Add(dr);
49InBlock.gif
50ExpandedSubBlockStart.gifContractedSubBlock.gifdgUser.Invoke(new data_1Callback(data_1),new object[]dot.gif{dtUser});
51ExpandedBlockEnd.gif                }

52 None.gif
53 None.gif private    void  data_1(DataTable dataTable)   
54 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {       
55InBlock.gif            try
56ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
57InBlock.gif                this.dgUser.DataSource = dataTable;
58InBlock.gif                this.dgUser.Refresh();   
59ExpandedSubBlockEnd.gif            }

60InBlock.gif            catch(Exception ex)
61ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
62InBlock.gif                MessageBox.Show(ex.Message.ToString());
63ExpandedSubBlockEnd.gif            }

64ExpandedBlockEnd.gif        }
   

看起来好像有些乱,有不懂的给我留言吧。

转载于:https://www.cnblogs.com/Lewis/archive/2006/08/26/487149.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值