新手,想新建一个线程显示当前时间到lable,不知道代码什么问题

馨宝宝 2016-11-30 11:05:30
public Form1()
{
InitializeComponent();

Thread TimeThread = new Thread(new ThreadStart(timer_Time));
TimeThread.IsBackground = true;
TimeThread.Start();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void timer_Time()
{
while(true)
{
Thread.Sleep(1000);
Time_label.Text = DateTime.Now.ToString("yyyy年MM月dd日,HH:mm:ss");
}
}

由于主界面比较耗时而且是用timer控制动态绘图,想后台新建线程显示当前时间,代码段大致是上面的样子,不知道为什么就是执行不了timer_Time,问题显示:

“System.InvalidOperationException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生

其他信息: 线程间操作无效: 从不是创建控件“Time_label”的线程访问它。
...全文
157 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
crystal_lz 2016-11-30
  • 打赏
  • 举报
回复
label.(Begin)Invoke(new MethodInvoker(() => { label.Text = ... ; }));
D56233577 2016-11-30
  • 打赏
  • 举报
回复
应该用UI线程来更新值 http://www.cnblogs.com/smileberry/p/3912918.html
馨宝宝 2016-11-30
  • 打赏
  • 举报
回复
引用 5 楼 diaodiaop 的回复:

            Time_label.BeginInvoke(new Action(() =>
            {
                Time_label.Text = DateTime.Now.ToString("yyyy年MM月dd日,HH:mm:ss");
            }));
会显示 错误 1 使用泛型 类型“System.Action<T>”需要 1 个类型参数 应该怎么做呢
馨宝宝 2016-11-30
  • 打赏
  • 举报
回复
引用 1 楼 D56233577 的回复:
应该用UI线程来更新值 http://www.cnblogs.com/smileberry/p/3912918.html
谢谢,得到解决!
  • 打赏
  • 举报
回复
by_封爱 版主 2016-11-30
  • 打赏
  • 举报
回复

            Time_label.BeginInvoke(new Action(() =>
            {
                Time_label.Text = DateTime.Now.ToString("yyyy年MM月dd日,HH:mm:ss");
            }));
xian_wwq 2016-11-30
  • 打赏
  • 举报
回复
线程中操作UI必须用委托 如果只是简单的更新时间,用个timer控件就够了
HenJiong 2016-11-30
  • 打赏
  • 举报
回复
label.(Begin)Invoke(new MethodInvoker(() => { label.Text = ... ; }));

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧