2015-05-28 69 views
0

當我執行以下代碼段時,應用程序掛起。我在這裏做錯了什麼?運行此代碼時Winforms應用程序崩潰

注意:即使我沒有thread.sleep,應用程序仍然崩潰。其實我已經加入了阻止它崩潰。

private void start_Click(object sender, EventArgs e) 
    { 
     boolValue = true; 
     while (boolValue) 
     { 
      counter++; //Class Variable =0 by default 
      Thread.Sleep(1000); 
      lbl.Text = counter.ToString();    
     } 
    } 

/////////////////////// /////////////////////////////

private void start_Click(object sender, EventArgs e) 
    { 
     boolValue = true; 
     while (boolValue) 
     { 
      counter++; //Class Variable =0 by default 

      lbl.Text = counter.ToString();    
     } 
    } 
+1

您告訴它永遠睡着。你期望什麼? –

+2

如果您想要顯示計數器,請使用計時器機制。 – Maarten

+0

看到我的答案!你正在建造無限循環。循環中的某處必須將boolValue更改爲false。否則循環不能隨時停止。 – Sebi

回答

2

它永遠不會改變boolValue的值。代碼將處於無限循環中。如果要顯示計數器的值,可以使用類Timer

private Timer myTimer = new Timer(); 

private void TimerEventProcessor(Object myObject, EventArgs myEventArgs)  
{  
    lbl.Text = counter.ToString(); 
    counter++; 
} 

private void start_Click(object sender, EventArgs e) 
{ 
    myTimer.Tick += new EventHandler(TimerEventProcessor);  
    myTimer.Interval = 1000; 
    myTimer.Start(); 
} 
} 
+0

感謝您的回覆@Spark。但是,請您詳細說明爲什麼我的應用程序與當前代碼崩潰 –

0

你必須在循環中的某處設置boolValue = false 。它無盡的循環。

例如:

private void start_Click(object sender, EventArgs e) 
{ 
    boolValue = true; 
    while (boolValue) 
    { 
     counter++; //Class Variable =0 by default 
     Thread.Sleep(1000); 
     lbl.Text = counter.ToString(); 

     if (counter == int.MaxValue) 
     { 
      boolValue = false; 
     } 
    } 
} 

一個更好的解決方案是使用定時器組件,而不是同時的()!

0

如果您想要顯示計數器,請參閱@ Spark的答案。 否則在循環內部添加以下命令,您必須考慮無限循環:

Application.DoEvents(); 
相關問題