using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 跨线程访问
{//跨线程指访问
public partial class Form1 : Form
{
private delegate void setTextValueCallBack(int x);
setTextValueCallBack setCallBack;//先定义委托类型变量。
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
setCallBack = setTextValue;//给委托变量赋值一个方法
Thread th = new Thread(textBox);//执行textBox方法
th.IsBackground=true;//设置为后台线程。
th.Start();
}
private void textBox()
{
for (int i = 0; i < 10000; i++)//textBox1的数值累加到9999
{
//setCallBack指向的是setTextValue方法。
textBox1.Invoke(setCallBack,i);//访问textBox1用Invoke方法
}
}
private void setTextValue(int value)
{
textBox1.Text = value.ToString();
}
}
}
TextBox1 的值循环在线程中累加到9999,运行结果。

补充:
简化写法:
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(testMethod);//创建一个线程执行testMethod方法
th.IsBackground = true;//设置为后台线程
th.Start();//开启线程
}
void testMethod()
{
for (int i = 0; i < 10000; i++)
{
textBox1.Invoke(new Action<int>(n=>{
textBox1.Text = n.ToString();}),i);//lambda表达试写法
}
}
浙公网安备 33010602011771号