C# 使用委托跨线程通讯
当我们需要处理大量数据时,为了使UI界面不致出现假死状态,我们就必须使用多线程进行处理。所以问题就出现了,我们都知道线程作为一个独立运行的单元,线程间不可以随意访问和修改,那么该怎么办呢?其实C#提供了跨线程访问的方法,也就是通过委托安全调用从非拥有控件的线程访问控件。
一、委托 我们首先先来了解下委托,简单地说,委托就是一个类,它定义了方法传递参数的类型和个数,使得我们可以把方法作为参数进行传递,使得程序具有更好的扩展性。如果大家还不明白的话,我们可以举个例子:
private void button1_Click(object sender, EventArgs e) { Thread newThread = new Thread(new ThreadStart(threadHandler)); newThread.Start(); } private void threadHandler() { if(this.label1.InvokeRequired) //判断label1控件是否是调用线程(即newThread线程)创建的,也就是是否跨线程调用,如果是则返回true,否则返回false { this.label1.Invoke(new EventHandler(setLabelText),new object[]{"这是lable控件"}); //EventHandler可以传递object参数 } else { this.label1.Text = "这是lable控件"; } } private void setLabelText(object o, System.EventArgs e) { this.label1.Text = o.ToString(); }后述:委托的内容就讲到这吧,讲得不对不好的地方请大家多多包涵。