在C#Windows应用程序中停止线程应用程序?

时间:2011-11-07 07:12:50

标签: c# windows-applications

我正在c#中创建一个Windows应用程序,在按钮单击时我已经编写了一些代码

public void btnStart_Click(object sender, EventArgs e)
        {
              while(true)
               {
                    //some processing
               }
        }

当我开始申请时,它会持续运行。 但在其他按钮上我想停止该应用程序。但我不知道怎么做?请帮助我。

6 个答案:

答案 0 :(得分:1)

这里可以让C#的计时器用户使用计时器作为秒表的一个例子:Creating a simple Stopwatch/Timer application with C# / Windows Forms

这是一个例子:检查完整答案和代码:C# start /Stop Button

使用BackGroundWorker的例子(它是AmaL的代码snipet的一个改变版本):

BackgroundWorker bgw;
Stopwatch watch;

public Form1()
{
  InitializeComponent();
  label1.Text = "";
  watch = new Stopwatch();
  bgw = new BackgroundWorker();
  bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
  bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
  bgw.WorkerReportsProgress = true;
  bgw.WorkerSupportsCancellation = true;
}

private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
  while (true)
  {
    bgw.ReportProgress(0);
    System.Threading.Thread.Sleep(100);

    if (!watch.IsRunning)
      break;
  }
}

private void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
  TimeSpan ts = watch.Elapsed;
  label1.Text = String.Format("{0:00}:{1:00}:{2:00}", ts.Minutes, ts.Seconds, ts.Milliseconds);
}

private void button1_Click(object sender, EventArgs e)
{
  watch.Start();
  bgw.RunWorkerAsync();
}

private void button2_Click(object sender, EventArgs e)
{
  watch.Stop();
  watch.Reset();
  bgw.CancelAsync();      
}

答案 1 :(得分:1)

看看Background Worker它很容易做线程:)

答案 2 :(得分:0)

你应该在UI线程以外的另一个线程中进行繁重的工作。

答案 3 :(得分:0)

答案 4 :(得分:0)

如果要创建响应式UI,则不应编写while (true) {...}之类的代码,因为这样会使主线程忙。在这里你真的应该使用BackgroundWorker。在通过WorkerSupportsCancellation启动工作线程之前,不要忘记设置其RunWorkerAsync()属性。 There is一个很好的操作方法。

答案 5 :(得分:0)

在执行此操作时,您正在阻止主线程(true)。

改为在另一个线程中运行繁重的工作。

您可以在此处找到线程教程:http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx