2016-04-14 61 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()运行时关闭表单,该怎么办? –

相关问题