在c# Windows应用程序中停止线程应用程序

本文关键字:应用程序 线程 Windows | 更新日期: 2023-09-27 18:13:37

我正在制作一个c#中的windows应用程序,其中在按钮单击我已经编写了一些代码

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

当我启动应用程序时,它连续运行。但在另一个按钮上,我想停止该应用程序。但我不知道怎么做?

在c# Windows应用程序中停止线程应用程序

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

你可以使用c#的计时器,这里有一个使用计时器的秒表的例子:用c#/Windows窗体创建一个简单的秒表/计时器应用程序

查看完整答案和代码:c# start/Stop Button

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

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();      
}

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

你应该在UI线程之外的另一个线程中完成繁重的工作。

看这里:http://www.c-sharpcorner.com/uploadfile/mgold/multithreadingintro10062005000439am/multithreadingintro.aspx

你正在阻塞你的主线程当这样做,而(true)。

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

你可以在这里找到一个线程教程:http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx