随笔 - 1  文章 - 2 评论 - 14 trackbacks - 1
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

与我联系

搜索

 

常用链接

留言簿

我参加的小组

我参与的团队

我的标签

随笔分类

随笔档案

dflying

技术专栏

最新评论

最近我在做一个项目,遇到了跨线程要去访问页面控件.但是总是提示出错,不能在其它线程中修改创建控件的线程的控件的值,后来采用了匿名代理,结果很轻松地解决了.解决过程如下:
首先在窗体上,创建一个listbox,lable.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace AccessControl
{
    public partial class Form1 : Form
    {     
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {  
            Thread newthread = new Thread(new ThreadStart(BackgroundProcess));
            newthread.Start();         

        }

        /// <summary>
        /// 定义一个代理
        /// </summary>
        private delegate void CrossThreadOperationControl();

        private void BackgroundProcess()
        {
            // 将代理实例化为一个匿名代理
            CrossThreadOperationControl CrossDelete = delegate()         
            {           
                int i = 1;
                while (i<5)
                {
                  
 // 向列表框增加一个项目
                    listBox1.Items.Add("Item " + i.ToString());                   
                    i++;
                }
                label1.Text = "我在新线程里访问这个lable!";
                listBox1.Items.Add(label1.Text);
            }  ;
            listBox1.Invoke(CrossDelete);           

        }       

    }
}
希望这个小技巧能够对你的的学习和工作有所帮助.若有更好的办法来解决跨线程访问控件的问题,不防也拿出来大家分享一下.

posted on 2008-04-10 19:32 王奇 阅读(509) 评论(7)  编辑 收藏

FeedBack:
#1楼  2008-03-14 22:20 任力      
匿名代理?好深奥,不懂
帮奇哥顶了
  回复  引用  查看    
#2楼  2008-03-15 17:38 侯垒      
我以前也没有见过这个东西.先学习一下.
  回复  引用  查看    
#3楼  2008-03-22 22:00 情缘      
看不懂,顶一下
  回复  引用  查看    
#4楼  2008-04-12 12:04 侯垒      
匿名代理,以前看过,不过没有注意.不过,现在懂了.
  回复  引用  查看    
#5楼  2008-04-16 20:05 高_超      
不错.以前用的是类的属性设置.ListBox.CheckForIllegalCrossThreadCalls = false;又多学了一点.以前只听过匿名代理.现在研究下......
  回复  引用  查看    
#6楼  2008-04-29 09:45 小泵但 [未注册用户]
不错呀,以前总是用BACKGROUNDWORKER ,现在发现这个好东西!
  回复  引用    
不错,有点帮助`
  回复  引用    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: