2010-07-22 65 views
2

我有一個Windows應用程序,它只是一個帶有定時器控件的窗體。我設法跟蹤到以下情況:.NET定時器控件

private void timer1_Tick(object sender, EventArgs e) 
{ 
    MessageBox.Show("Test"); 
    timer1.Enabled = false; 
} 

將打印測試一遍又一遍,直到我停止程序。但是:

private void timer1_Tick(object sender, EventArgs e) 
    { 
     //MessageBox.Show("Test"); 
     textBox1.Text += "t"; 
     timer1.Enabled = false;    
    } 

只在文本框中添加一個「t」。

誰能告訴我爲什麼MessageBox.Show會導致函數在定時器被禁用之前返回?

回答

0

timer1_TickMessageBox.Show塊的執行,直到關閉messsagebox,因此呼叫設置timer1.Enabled = false;沒有出現,直到後調用。因此,定時器仍在運行,因此每次定時器觸發時,_Tick`都會繼續被調用,直到您在其中一個消息框中按OK。

你需要什麼,如果你想顯示的消息框,以再次發射停止計時,就是:

private void timer1_Tick(object sender, EventArgs e) 
{ 
    timer1.Enabled = false; 
    MessageBox.Show("Test"); 
} 
0

您在之後禁用了計時器,用戶單擊了消息框。

MessageBox.Show顯示模態對話框。它會在用戶回覆消息框後返回(到調用方法)。如果您先禁用定​​時器,則不會再次觸發事件,用戶將有足夠的時間作出反應。

試試這個:

timer1.Enabled = false; 
    MessageBox.Show("Test"); 
0

你在測試點擊OK,每個定時器點擊?如果消息框保持堆疊,則這是因爲MessageBox.Show直到關閉消息框纔會返回。同時,消息泵將繼續運行,並處理您的計時器消息。