最近我在做一个项目,遇到了跨线程要去访问页面控件.但是总是提示出错,不能在其它线程中修改创建控件的线程的控件的值,后来采用了匿名代理,结果很轻松地解决了.解决过程如下:
首先在窗体上,创建一个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); }
}
}希望这个小技巧能够对你的的学习和工作有所帮助.若有更好的办法来解决跨线程访问控件的问题,不防也拿出来大家分享一下.原文地址: