【发布时间】:2011-04-21 15:25:31
【问题描述】:
阅读了几篇文章后,我仍然不确定我是否理解多线程来解决我的问题 特殊问题。
我有一个主窗体,它将启动一个后台工作线程(worker)。工作线程将执行 While(!Stopping) 无限循环,并在每次迭代结束时休眠,由全局停止对象(只读锁定对象)终止。当用户按下停止按钮时工作正常, worker 将在当前迭代后停止。
现在我想当用户关闭主窗体时,它会先设置停止标志,让工作线程 完成目前的工作。之后主窗体将关闭。看起来很简单,但我无法让它工作。
我尝试了worker.Join(),或者在while循环中测试woker.IsAlive,但是由于某种原因,这两种情况都会在几秒钟后锁定应用程序(主窗体)?
以下是我在 Form_Closing 事件处理程序中的代码(不工作):
// Tell the thread to stop the file
Stop();
Logger.Info("Stopping the thread by Close the application");
//Not working as well
//worker.Join();
while (worker.IsAlive)
{
Thread.Sleep(5000);
Logger.Info("After sleep for 5 seconds");
}
Logger.Info("worker thread stopped");
有趣的是,工作线程似乎总是在每次循环迭代结束之前写入日志事件,然后日志条目的其余部分将是里面的主窗体事件 while(worker.IsAlive) 循环。
【问题讨论】:
标签: c# multithreading