我有一個使用while循環顯示數字的函數,但是我想通過單擊按鈕使用c#來隨機變量值停止執行while循環。如何使用C單擊按鈕來中止一個while循環#
例如:
private void FrqSent()
{
int i = 1;
while (i <= 5)
{
i = i + 1;
}
}
我有一個使用while循環顯示數字的函數,但是我想通過單擊按鈕使用c#來隨機變量值停止執行while循環。如何使用C單擊按鈕來中止一個while循環#
例如:
private void FrqSent()
{
int i = 1;
while (i <= 5)
{
i = i + 1;
}
}
這裏是你如何使用一個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。
不是很優雅,但簡單
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();
}
}
}
'Application.DoEvents()'不只是*非優雅*,它很醜*:如果用戶在FrqSent()運行時關閉表單,該怎麼辦? –
然後它會更好看線程的while循環將掛起你的UI – BugFinder
是這個循環中運行異步或在另一個線程?如果不是,您的按鈕將不會很多 –
如果您不熟悉多個線程的使用,請使用BackgroundWorker。將您的功能放入BackgroundWorker的DoWork事件中,並使用RunWorkerAsync()開始執行該功能,並使用CancelAsync()停止執行該功能。 –