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