繁体   English   中英

System.Windows.Forms.Timer和MessageBox

[英]System.Windows.Forms.Timer And MessageBox

有人可以让我知道为什么System.Windows.Forms.Timer继续显示多个消息框吗? 我以为它在GUI线程上...因此,在第一个消息框之后,GUI线程应该被阻止。 但这种情况并非如此

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();


    }

    int nValue = 0;

    void tmr_Tick(object sender, EventArgs e)
    {
        nValue++;
        MessageBox.Show(nValue.ToString());
    }

    System.Windows.Forms.Timer tmr = new System.Windows.Forms.Timer();

    private void btnStartTimer_Click(object sender, EventArgs e)
    {            
        tmr.Interval = 500;
        tmr.Enabled = true;
        tmr.Tick += new EventHandler(tmr_Tick);
    }
}

MessageBox.Show()方法包括(就像所有模式对话框一样)一个消息循环,该循环继续泵送窗口消息。

窗口消息是允许窗口与用户进行交互(更新自身,接受输入等)的Forms.Timer ,也是使Forms.Timer类起作用的条件。

如果希望Forms.Timer在显示对话框时停止滴答,则需要在显示对话框之前将计时器的Enabled属性设置为false

在您的Tick事件中,停止计时器,然后在MessageBox.Show之后再次启动。

void tmr_Tick(object sender, EventArgs e)
{
    tmr.Enabled = false;
    nValue++;
    MessageBox.Show(nValue.ToString());
    tmr.Enabled = true; 
}

之所以会重复出现MessgeBoxes,是因为您的计时器在显示第一个MessageBox之后仍在继续。

一个消息框不会阻止GUI线程。 就这么简单。 毕竟,您可以与消息框进行交互:)

另外:计时器的内部工作方式尚不清楚,但是我猜想它会在另一个线程上运行,只是在GUI线程上返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM