我有一个使用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()停止执行该功能。 –