在Main Thread之外的线程中更新Control的属性

来源:互联网 发布:阳江网络问政平台投诉 编辑:程序博客网 时间:2024/04/30 13:36

在.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();
}