在Timer的Tick事件中写MessageBox.Show为什么会弹出多个对话框?MessageBox会阻断线程的运行啊,总不可能每次Tick事件都是一个线程吧

解决方案 »

  1.   

    http://tech.sina.com.cn/s/2008-07-07/1635722555.shtml
      

  2.   

    http://www.itwis.com/html/net/winform/20080402/1185.html
      

  3.   

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

  4.   

    Timer是新创建了一个窗口,在这个窗口上创建的计时器,不和界面窗口共享消息循环,所以MessageBox阻断不了
      

  5.   

    TIMER好像不怎麼好,性能不好
      

  6.   

    MessageBox.Show和Application.DoEvent一样都泵送消息,也就会收到WM_TIMER消息了。一般模式窗口工作方式类似:EnableWindow(hParent, FALSE);
    while( GetMessage(&msg, NULL, 0, 0) )
    {
       if( !quitDialg && !IsDialogMessage(hCurrentDlg, &msg) )
       {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
       }
    }
    EnableWindow(hParent, TRUE);
      

  7.   

    click 事件中,先把timer1.stop(),MessageBox之后,再timer1.start()
      

  8.   

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

  9.   

    因为Timer中的属性internal默认为50,也就是每50毫秒就会触发一次事件,当然会显示很多框框喽
      

  10.   

    form没有加入线程同步的设置,好像一个什么设置为false就好了
      

  11.   

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

  12.   


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

  13.   

    Tick是定时触发。你可以在事件中做必要的限定只触发你需要的次数。