这是一部分重要的代码,用VS2005通过。
使用到两个控件,一个按钮button1,一个标签label1。
private void button1_Click(object sender,
EventArgs e)
{
Thread thread=new
Thread(new ThreadStart(myname));
thread.IsBackground=true;
thread.Start();
//
启动一个线程。
}
private void myname()
{
MethodInvoker mi = new
MethodInvoker(hello);
//创建一个委托,hello是该委托所托管的代码,必须是声明为void的。
Invoke(mi);//同步执行委托。
//BeginInvoke(mi);异步执行委托。
}
private void hello()
{
label1.Text = "我是跨线程的!";
}
那里不正确,一定要指出,我可不想误导人,也不想被自己误导。
PS:写完后我发现http://tb.blog.csdn.net/TrackBack.aspx?PostId=715064早就有解释,比我的还详细,领教了。
故补充以下代码:
private
Thread
myThread;
private void Form1_Load(object sender, EventArgs e)
{
myThread = new Thread(new
ThreadStart(RunsOnWorkerThread));
myThread.Start();
}
private void
RunsOnWorkerThread()
{
//DoSomethingSlow();
string pList = "myThread线程调用UI控件";
label1.BeginInvoke(new
System.EventHandler(UpdateUI),
pList);
}
//直接用System.EventHandler,没有必要自定义委托
private void UpdateUI(object o, System.EventArgs e)
{
//UI线程设置label1属性
label1.Text = o.ToString() + "成功!";
}