VS2005中,C#中跨线程访问控件问题解决方案

最近我在做一个项目,遇到了跨线程要去访问页面控件.但是总是提示出错,不能在其它线程中修改创建控件的线程的控件的值,后来采用了匿名代理,结果很轻松地解决了.解决过程如下:

首先在窗体上,创建一个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);

}

}

}

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