- 积分
 - 40186
 
- 好友
  
- 记录
  
- 主题
  
- 帖子
  
- 听众
  
- 收听
  
 
 
 
 
 
 | 
 
 
发表于 2013-3-25 14:08:26
|
显示全部楼层
 
 
 
http://www.sufeinet.com/thread-13-1-1.html其实我的例子里有关于这块的使用,只是没有单独放出来。 
 
线程与线程之间是不能直接通信 的,当然使用委托就不一样了。 
这是典型的使用委托访问控件。 
在子线程不能直接访问其它线程创建的控件变量,或者是直接变量。要想访问最好的办法就是使用这个委托 
 
[code=csharp]    
             //创建一个委托,是为访问TextBox控件服务的。 
            public delegate void UpdateTxt(string msg); 
            //定义一个委托变量 
            public UpdateTxtReceive updateTxt; 
 
            //修改TextBox值的方法。 
            public void UpdateTxtMethod(string msg) 
            { 
                     this.txt.Text=msg; 
            } 
            //此为在非创建线程中的调用方法,其实是使用TextBox的Invoke方法。 
            public void ThreadMethodTxt(string msg) 
            { 
                this.txt.Invoke(updateTxtReceive, new object[] { msg }); 
            }[/code] 
其实楼主在使用时加载这部分可以这样写 
[code=csharp]updateTxt=new UpdateTxtReceive(UpdateTxtMethod)[/code] 
这样就行了, 
而 this.txt.Invoke(updateTxtReceive, new object[] { msg });同样也可以修改为 
[code=csharp] this.txt.Invoke(updateTxtReceive, msg );[/code] 
或者是[code=csharp]updateTxtReceive(msg)[/code] 
不过也不知道什么原因楼主的代码可能存在一个小问题那就是 你定义的委托实例为updateTxt而你一直使用的是updateTxtReceive,还有UpdateTxtReceive 委托从来没有出现过,楼主定义的是UpdateTxt而下面怎么出现updateTxtReceive呢?如果只是这样是没有办法实现楼主所说的效果的, 
我修改如下 
所代码应该修改为如下所示 
[code=csharp]  //创建一个委托,是为访问TextBox控件服务的。 
        public delegate void UpdateTxt(string msg); 
        //定义一个委托变量 
        public UpdateTxt updateTxt; 
 
        private void Form1_Load(object sender, EventArgs e) 
        { 
            updateTxt = new UpdateTxt(UpdateTxtMethod); 
        } 
        //修改TextBox值的方法。 
        public void UpdateTxtMethod(string msg) 
        { 
            this.txt.Text = msg; 
        } 
        //此为在非创建线程中的调用方法,其实是使用TextBox的Invoke方法。 
        public void ThreadMethodTxt(string msg) 
        { 
            this.txt.Invoke(UpdateTxt, new object[] { msg }); 
            //以下是苏飞修改部分 
            //this.txt.Invoke(updateTxt, new object[] { msg }); 
            //updateTxt(msg) 
            //如果是窗体的可以这样写 
            //  this.BeginInvoke(updateTxt, msg); 
        } 
[/code] 
这样就可以实例了, 
关键这块的可以参考一下我上面发的例子,或者是参考一下这个 
http://www.sufeinet.com/forum.php?mod=viewthread&tid=2153 
 |   
 
 
 
 |