private void button4_Click(object sender, EventArgs e)
{
DataGetThreads[0] = new Thread(new ThreadStart(DataGet));
DataGetThreads[0].Start();
}
public void DataGet()
{
timerDraw.Interval = 200;
timerDraw.Start();
//MessageBox.Show("如果加上这句")①
}
private void timerDraw_Tick(object sender, EventArgs e)
{
MessageBox.Show("已开始定时");②
}
从按下button4开始, 为什么如果我没有写①这句语句,系统就不会执行②这句语句,系统没有反应;如果我写了①这句,执行结果是弹出“如果加上这句”这个窗口,然后无限地弹出“已开始定时”?很不解,为什么加了一句话定时器就工作,没加就不工作?是不是多线程和定时器有冲突?

========================================================================================

timer控件引用的是Sytem.Windows.Forms.Timer类。
Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理。 它要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。
所以说Sytem.Windows.Forms.Timer是工作在UI线程上的。 而你的例子并不是, 你把Timer实例工作在了另外一个你自己创建的Thread中而不是UI线程中。这就解释了为什么不能工作的原因。
也就是说timer控件适合单线程环境。
你在这里应该用Sytem.Timers.Timer类。
详情:https://msdn.microsoft.com/zh-cn/library/system.windows.forms.timer(VS.80).aspxhttps://msdn.microsoft.com/zh-cn/library/system.timers.timer.aspx
参考:https://social.msdn.microsoft.com/Forums/sqlserver/zh-CN/857bf39e-e5b1-49d5-af72-58c157fd841d/timertimer

C#中多线程和定时器是不是有冲突?相关推荐

  1. 关于delphi中多线程采用定时器的做法

    delphi中的提供了一个tthread的多线程类,开发者可以根据自身的需要,定制相应功能的多线程,而定时器在多线程中有很广泛的应用,在这里,只说关于waitforsingleobject来做定时器的 ...

  2. CentOS 8中安装Docker出现和Podman冲突

    感谢这位博主的文章: CentOS 8中安装Docker出现和Podman冲突_ywyngq的博客-CSDN博客https://blog.csdn.net/ywyngq/article/details ...

  3. iOS中的CADisplayLink定时器

    2019独角兽企业重金招聘Python工程师标准>>> iOS中的CADisplayLink定时器 说到定时器,在iOS中最常用的为NSTimer类,其实CADisplayLink类 ...

  4. Qt中多线程间的同步

    文章目录 1 Qt中多线程间的同步 1 Qt中多线程间的同步 多线程编程的本质是什么? 并发性是多线程编程的本质. 在宏观上,所有线程并行执行. 多个线程间相互独立,互补干涉. 常规解决方案设计: 问 ...

  5. Python 中多线程共享全局变量的问题

    Python 中多个线程之间是可以共享全局变量的数据的. 但是,多线程共享全局变量是会出问题的. 假设两个线程 t1 和 t2 都要对全局变量 g_num (默认是0)进行加1运算,t1 和 t2 都 ...

  6. Delphi中多线程用Synchronize实现VCL数据同步显示

    概述: VCL实现同步的另一种方法就是调用线程类的Synchronize的过程,此过程需要一个无参数的procedure,故在此procedure中无法传递参数值,但可以通过类的成员来实现.在类的Ex ...

  7. python3多线程异步爬虫_python3爬虫中多线程进行解锁操作实例

    生活中我们为了保障房间里物品的安全,所以给门进行上锁,在我们需要进入房间的时候又会重新打开.同样的之间我们讲过多线程中的lock,作用是为了不让多个线程运行是出错所以进行锁住的指令.但是鉴于我们实际运 ...

  8. python爬虫多线程是什么意思_python爬虫中多线程的使用详解

    queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...

  9. 在Spring中使用JDK定时器实现调度任务

    在Spring中使用JDK定时器实现调度任务 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs 本文探讨Spring如何集成JDK的Timer定时器,实现 ...

最新文章

  1. Cassandra数据模型设计最佳实践
  2. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)
  3. Dockerfile使用方法详解
  4. 用按键精灵自动消除行号失败记
  5. 数据挖掘 —— 模型评估
  6. Linux kernel的中断子系统之(九):tasklet
  7. 信息学奥赛一本通 2050:【例5.20】字串包含 | OpenJudge NOI 1.17 19:字符串移位包含问题
  8. PostgreSQL 当月最后一天的工作日 , 计算日期是星期几
  9. 手机距离传感器坏了有什么影响_恢复出厂设置对手机有什么影响?
  10. NSURLCache详解和使用
  11. 美团在ACL2021上提出基于对比学习的文本表示模型,效果提升8%
  12. PowerDesigner生成java类图
  13. Java 项目中使用 TongLink/Q 实现消息队列传输
  14. 电脑技巧2——调出控制面板(桌面控制面板)
  15. 《Chrome插件英雄榜》第88篇更新!知乎网页助手让网页版知乎更好用
  16. CVE-2018-4878 flash漏洞复现
  17. 法律权利与法律义务的二重性
  18. 开源协议(Open Source License)
  19. js刷新页面方法大全
  20. 80端口占用问题 -- steam社区打不开

热门文章

  1. OpenCV Tracker简介
  2. Julia OpenCV绑定简介
  3. C++matrix chain multiplication矩阵链乘法算法的实现(附完整源码)
  4. QT的QModbusRequest类的使用
  5. QT的QDesignerWidgetBoxInterface类的使用
  6. c++构造函数和析构函数的调用顺序研究
  7. C++对C的加强之struct类型加强
  8. c++TCP的三次握手和四次挥手
  9. 登陆用友服务器超时未响应,用友T3软件10.8plus1普及版服务器提示“客户端已经较长时间未连接加密服务器,超时2880秒,请退出产品重新登录”?-用友T3...
  10. 3.数据库操作相关术语,Oracle认证,insert into,批量插入,update tablename set,delete和truncate的区别,sql文件导入