class GClock:Form
{
#region 跨线程更新UI控件
private delegate void UpdataTextDelegate(Label myControl, string myArg);
/// <summary>
/// 由 UpdataTextDelegate 委托实例调用,跨线程更新UI方法
/// </summary>
/// <param name="myControl"></param>
/// <param name="myArg"></param>
private void DelegateMethod(Label myControl, string myArg)
{
myControl.Text = myArg;
}
/// <summary>
/// 更新一个 Label 控件的 Text 属性
/// </summary>
/// <param name="myControl">要更新的 Lable 控件</param>
/// <param name="myArg">Text 内容</param>
private void UpdataLabelText(Label myControl, string myArg)
{
myControl.BeginInvoke(
new UpdataTextDelegate(DelegateMethod),
new object[] { myControl, myArg });
}
#endregion
// 程序入口
public static void Main()
{
Application.Run(new GClock());
}
Label timeLabel;// 显示时间的 Label 控件
Thread th; // 修改 timeLabel 控件 Text 属性的线程
public GClock()
{
Text = "G Clock";
// 初始化 timeLabel 控件
timeLabel = new Label();
timeLabel.Parent = this;
timeLabel.AutoSize = false;
timeLabel.Dock = DockStyle.Top;
// 初始化后台线程,并马上开始执行
th = new Thread(new ThreadStart(MyWatch));
th.IsBackground = true;
th.Start();
}
// 这个方法在另一个线程中执行修改主线程中的一个 Label 控件的 Text 属性。
private void MyWatch()
{
while (true)
{
UpdataLabelText(timeLabel, DateTime.Now.ToString("F"));
Thread.Sleep(1000);// 线程休眠 1 秒
}
}
}
Winform 使用委托线程修改控件属性.显示时间示例
最新推荐文章于 2022-08-04 15:27:06 发布