首页 > 代码库 > C#中线程对控件的访问
C#中线程对控件的访问
Control类提供了一个Invoke方法来给子线程访问主线程的控件,它的原型是酱紫的:
object.Control.Invoke(Delegate method); object.Control.Invoke(Delegate method,params object[] args);
method是已创建的委托对象,如果该对象的关联方法有参数,那就放在数组args中,没有就不用传
Invoke食用方法如下(假设我访问控件的方法是getForms()):
public delegate void getFormsDelegate(getForms的参数声明);//声明一个与所调用的用来访问控件的方法匹配的委托类型,参数必须一致 public void myThread() { //线程通过getFormsDelegate()的委托,间接执行访问控件的方法getForms() Invoke(new getFormsDelegate(getForms),new object[] {getForms的参数列表}); }
来一个完整的例子:
这是使线程将学生信息输出到ListBox控件的例子
namespace ThreadVisitingControl { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void showStuIfo(string no, string name, double score) //本例中的线程要通过这个方法来访问主线程中的控件 { listBox1.Items.Add("学号:" + no); listBox1.Items.Add("姓名:" + name); listBox1.Items.Add("成绩:" + score.ToString()); } public delegate void stuInfoDelegate(string no, string name, double score); //声明委托类型 private void stuThread() //线程方法 { Invoke(new stuInfoDelegate(showStuIfo), new object[] { "20101001", "张三", 95.5 }); //线程通过方法的委托执行showStuIfo(),实现对ListBox控件的访问 } private void button1_Click(object sender, EventArgs e) { Thread stuth = new Thread(new ThreadStart(stuThread)); //创建线程 stuth.Start(); //执行线程 } } }
C#中线程对控件的访问
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。