2016-04-14 23 views
2

我有一個使用while循環顯示數字的函數,但是我想通過單擊按鈕使用c#來隨機變量值停止執行while循環。如何使用C單擊按鈕來中止一個while循環#

例如:

private void FrqSent() 
{ 
    int i = 1; 
    while (i <= 5)  
    { 
     i = i + 1; 
    } 
} 
+3

然後它會更好看線程的while循環將掛起你的UI – BugFinder

+0

是這個循環中運行異步或在另一個線程?如果不是,您的按鈕將不會很多 –

+0

如果您不熟悉多個線程的使用,請使用BackgroundWorker。將您的功能放入BackgroundWorker的DoWork事件中,並使用RunWorkerAsync()開始執行該功能,並使用CancelAsync()停止執行該功能。 –

回答

4

這裏是你如何使用一個BackgroundWorker來完成你的任務,一個簡單的例子:

public partial class Form1 : Form 
{ 
    private int i = 1; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void FrqSent() 
    {   
     while (i <= 500000000) 
     { 
      if (backgroundWorker1.CancellationPending) 
      { 
       break; 
      } 
      else 
      { 
       i = i + 1; 
      } 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     backgroundWorker1.RunWorkerAsync(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     backgroundWorker1.CancelAsync(); 
    } 

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     FrqSent(); 
    } 

    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     MessageBox.Show(i.ToString()); 
    } 
} 

只需創建一個新的Windows窗體項目,並添加一個BackgroundWorker對象和2個按鈕。您必須手動設置DoWork,RunWorkerCompleted和Click事件。

編輯:不要忘記將BackgroundWorker的WorkerSupportsCancellation屬性設置爲true。

0

不是很優雅,但簡單

public partial class Form1 : Form 
{ 
    private bool _stop; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void buttonStart_Click(object sender, EventArgs e) 
    { 
     _stop = false; 
     FrqSent(); 
    } 

    private void buttonStop_Click(object sender, EventArgs e) 
    { 
     _stop = true; 
    } 

    private void FrqSent() 
    { 
     int i = 1; 
     while (i <= 5000000 && !_stop) 
     { 
      i = i + 1; 
      Application.DoEvents(); 
     } 
    } 

} 
+0

'Application.DoEvents()'不只是*非優雅*,它很醜*:如果用戶在FrqSent()運行時關閉表單,該怎麼辦? –

相關問題