3

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

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

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

4

6 回答 6

1

您可以使用 C# 的计时器,这里是使用计时器的秒表的一个示例:Creating a simple Stopwatch/Timer application with C# / Windows Forms

这是一个示例:检查完整答案和代码: 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();      
}
于 2011-11-07T07:15:32.217 回答
1

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

于 2011-11-07T07:15:57.933 回答
0

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

于 2011-11-07T07:14:55.267 回答
0

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

于 2011-11-07T07:15:52.167 回答
0

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

于 2011-11-07T07:24:50.013 回答
0

这样做时,您正在阻塞主线程(true)。

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

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

于 2011-11-07T07:35:56.157 回答