日期:2014-05-18  浏览次数:21401 次

Timer的Tick事件问题
在Timer的Tick事件中写MessageBox.Show

为什么会弹出多个对话框?

MessageBox会阻断线程的运行啊,总不可能每次Tick事件都是一个线程吧

------解决方案--------------------
http://tech.sina.com.cn/s/2008-07-07/1635722555.shtml
------解决方案--------------------
探讨
http://tech.sina.com.cn/s/2008-07-07/1635722555.shtml

------解决方案--------------------
http://www.itwis.com/html/net/winform/20080402/1185.html
------解决方案--------------------
你好讨厌啊,我不小心刚测试了一下,果然一直弹窗口,只好结束任务了。。。
我觉得每一次tick都是重新调用的,所以messagebox阻断不了。
------解决方案--------------------
探讨
你好讨厌啊,我不小心刚测试了一下,果然一直弹窗口,只好结束任务了。。。
我觉得每一次tick都是重新调用的,所以messagebox阻断不了。

------解决方案--------------------
Timer是新创建了一个窗口,在这个窗口上创建的计时器,不和界面窗口共享消息循环,所以MessageBox阻断不了
------解决方案--------------------
TIMER好像不怎麼好,性能不好
------解决方案--------------------
MessageBox.Show和Application.DoEvent一样都泵送消息,也就会收到WM_TIMER消息了。

一般模式窗口工作方式类似:
C/C++ code

EnableWindow(hParent, FALSE);
while( GetMessage(&msg, NULL, 0, 0) )
{
   if( !quitDialg && !IsDialogMessage(hCurrentDlg, &msg) )
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }
}
EnableWindow(hParent, TRUE);

------解决方案--------------------
探讨
引用:
你好讨厌啊,我不小心刚测试了一下,果然一直弹窗口,只好结束任务了。。。
我觉得每一次tick都是重新调用的,所以messagebox阻断不了。



男的还是女的呀,如果是男的,我O:::::::::::

------解决方案--------------------
messagebox不会阻断time吧
------解决方案--------------------
探讨
引用:
引用:
你好讨厌啊,我不小心刚测试了一下,果然一直弹窗口,只好结束任务了。。。
我觉得每一次tick都是重新调用的,所以messagebox阻断不了。



男的还是女的呀,如果是男的,我O:::::::::::

汗一个。。。

------解决方案--------------------
MessageBox.Show和Application.DoEvent一样都泵送消息,也就会收到WM_TIMER消息了。

------解决方案--------------------
timer是不会被阻断的。
------解决方案--------------------
探讨
http://www.itwis.com/html/net/winform/20080402/1185.html

------解决方案--------------------
方法不错 学习了

------解决方案--------------------
因为Timer中的属性internal默认为50,也就是每50毫秒就会触发一次事件,当然会显示很多框框喽
------解决方案--------------------
form没有加入线程同步的设置,好像一个什么设置为false就好了
------解决方案--------------------
Timer不是线程

------解决方案--------------------
这个事件特殊,它是隔一定的时间久执行一次。的确你的messagebox是可以阻断后面的程序执行的,也就是消息框后面的程序没有执行。但是到了时间该事件却是再次执行。
------解决方案--------------------
C# code

 private void timer1_Tick(object sender, System.EventArgs e)
{
  timer1.Enabled=false;//如果不先把enabled设置成false对话框会一直弹下去
  MessageBox.show("提示信息");
  timer1.Enabled=true;
}