C#中多线程和定时器是不是有冲突? 5

privatevoidbutton4_Click(objectsender,EventArgse){DataGetThreads[0]=newThread(newThre... 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开始, 为什么如果我没有写①这句语句,系统就不会执行②这句语句,系统没有反应;如果我写了①这句,执行结果是弹出“如果加上这句”这个窗口,然后无限地弹出“已开始定时”?很不解,为什么加了一句话定时器就工作,没加就不工作?是不是多线程和定时器有冲突?求解!谢谢!
展开
 我来答
chenhp2
推荐于2017-11-27 · TA获得超过140个赞
知道小有建树答主
回答量:424
采纳率:0%
帮助的人:169万
展开全部
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).aspx
https://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
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式