2015-09-14 58 views
0

我想知道爲什麼只有if語句中的第一行是唯一正在執行的行。if語句中的所有項目都沒有觸發

bool messageDisplayed = false; 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    var position = axVLCPlugin21.input.Position; 

    label1.Text = string.Format("{0}% completed", position * 100); 

    if (position > 0.8 && messageDisplayed == false) 
    { 
     MessageBox.Show("80 has been passed"); 
     messageDisplayed = true; 
    } 
} 

MessageBox的不斷顯示出來不斷,導致我相信messageDisplayed = true從來沒有被設置,所以我設置一個斷點檢查。

果然,進入if語句,顯示消息框,然後重新啓動事件 - 而沒有去messageDisplayed = true;

是任何人都能夠看到,如果我去錯了地方?

回答

3

MessageBox.Show()「暫停」代碼的執行。當您關閉MessageBox時會觸發messageDisplayed = true;

因此,修改代碼如下:

if (position > 0.8 && !messageDisplayed) 
{ 
    messageDisplayed = true; 
    MessageBox.Show("80 has been passed"); 
} 
+3

請'!messageDisplayed'而不是'messageDisplayed == false' – kevintjuh93

0

消息框導致運行停頓,它可以讓你的事件再次發射,甚至在你的布爾變量成爲現實。試着把你的布爾在消息箱之前