簡體   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