在.net中不能直接在UI Control的创建线程之外修改UI Control的属性和内容。一个基本办法是通过调用UIControl 的Invoke方法。考虑一个简单的例子:我们希望在一个通过btnStart启动的线程A中,每隔10秒把txtTime的Text属性更新为:线程A的线程名+线程A传入的“当前时间”。
下面是主要代码
private void btnStart_Click(object sender, System.EventArgs e)
{
Thread th = new Thread(new ThreadStart(WorkThreadMethod));
th.Name = "TH" + i;
th.Start();
}
public delegate void UpdateTextCallback(string threadName, DateTime time);
private void WorkThreadMethod()
{
Thread.Sleep(10000);
txtTime.Invoke(new UpdateTextCallback(this.UpdateText), new object[]{Thread.CurrentThread.Name, DateTime.Now});
}
private void UpdateText(string threadName, DateTime)
{
txtTime.Text = threadName + time.ToString();
}