.net的定时器,为何在操作UI控件的时候,却不用this.Invoke()呢?

weizhuangwen 2013-08-16 07:08:59
.net的定时器,为何在操作UI控件的时候,却不用this.Invoke()呢?

那么定时器是算一个线程吗?跨线程操作如果线程安全,一般要用this.Invoke()。
为什么定时器委托的方法可以直接操作UI的控件?
...全文
220 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvchengwei 2013-08-18
  • 打赏
  • 举报
回复
定时器就是运行在UI线程上边的。
  • 打赏
  • 举报
回复
引用 4 楼 superliu1122 的回复:
System.Threading.Timer System.Timers.Timer System.Windows.Forms.Timer 前两个是独立线程,第三个和界面是同一线程
第二个,如果用户是简单地从工具栏上拖入界面的,那么默认地就跟窗体是同一线程。
  • 打赏
  • 举报
回复
引用 2 楼 weizhuangwen 的回复:
[quote=引用 1 楼 sp1234 的回复:] http://bbs.csdn.net/topics/370096927http://bbs.csdn.net/topics/370096927
里面说了很多,但没找到我这个问题的要点。能否直接告诉我呢??[/quote] 我已经回复了要点。你可以不看这个帖子别人的回复,但是我的要看一下 :-)
tcmakebest 2013-08-17
  • 打赏
  • 举报
回复
事实已经证明,这个计时器运行的线程就是主线程。
jshi123 2013-08-17
  • 打赏
  • 举报
回复
控件工具上拖出来的是System.Windows.Forms.Timer,这个定时器里的代码和窗体内的其它代码在同一个UI主线程中,是同步顺序执行的。 你可以这样测试: private void Form1_Load(object sender, EventArgs e) { timer1.Start(); Thread.Sleep(300000); } 这样在5分钟内,定时器都不会得到执行,界面也没反应。
weizhuangwen 2013-08-17
  • 打赏
  • 举报
回复
引用 5 楼 tcmakebest 的回复:
事实已经证明,这个计时器运行的线程就是主线程。
不会吧??但是定时器里面的代码可以和主线程并行运行啊。怎么会和主线程是一个线程呢。我说的可是工具栏里面的那个timer控件啊
superliu1122 2013-08-16
  • 打赏
  • 举报
回复
System.Threading.Timer System.Timers.Timer System.Windows.Forms.Timer 前两个是独立线程,第三个和界面是同一线程
weizhuangwen 2013-08-16
  • 打赏
  • 举报
回复
一个大牛告诉我的是: 对于普通的线程,是需要invoke,才能调用界面上的控件。 但对于timer控件,无需使用invoke,因为,timer控件内部在调用tick事件的时候,已经在内部使用了invoke的方式。 不知道对不对?
weizhuangwen 2013-08-16
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
http://bbs.csdn.net/topics/370096927http://bbs.csdn.net/topics/370096927
里面说了很多,但没找到我这个问题的要点。能否直接告诉我呢??
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/370096927http://bbs.csdn.net/topics/370096927

110,533

社区成员

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

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

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