Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#Windows应用程序中停止线程应用程序?_C#_Windows Applications - Fatal编程技术网

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

在C#Windows应用程序中停止线程应用程序?,c#,windows-applications,C#,Windows Applications,我正在用c#制作一个windows应用程序,在这个应用程序中,我按一下按钮就编写了一些代码 public void btnStart_Click(object sender, EventArgs e) { while(true) { //some processing } } 当我启动应用程序时,它会持续运行。 但在另一个按钮上,我想停

我正在用c#制作一个windows应用程序,在这个应用程序中,我按一下按钮就编写了一些代码

public void btnStart_Click(object sender, EventArgs e)
        {
              while(true)
               {
                    //some processing
               }
        }
当我启动应用程序时,它会持续运行。
但在另一个按钮上,我想停止该应用程序。但是我不知道怎么做?请帮帮我。

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

你可以使用C的计时器;下面是一个使用计时器的秒表示例:

下面是一个示例:在以下位置检查完整答案和代码:

使用BackGroundWorker的示例(它是AmaL代码snipet的一个稍加修改的版本):


看看这里:

看看
后台工作人员
线程处理非常简单:)

如果你想创建一个响应性的UI,你不应该在(true){…}时编写
这样的代码,因为这样你会让主线程很忙。这里你真的应该用。在启动辅助线程之前,不要忘记设置其属性。一个很好的操作方法。

在执行此操作时,您正在阻塞主线程(正确)

把你繁重的工作换成另一个线程

您可以在这里找到线程教程:

您所说的“停止该应用程序”是什么意思?您实际上是在启动另一个应用程序,还是说“停止在事件处理程序中运行的代码”?您的标题提到了线程,但没有迹象表明您正在启动一个新线程-听起来您正在UI线程中完成所有工作:(
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();      
}