实现“停止/取消”按钮以停止线程(不是后台工作线程)的好方法是什么
本文关键字:线程 工作 后台 是什么 方法 实现 取消 停止 按钮 | 更新日期: 2023-09-27 18:32:06
我有一个WPF应用程序,它与远程服务器进行大量通信,因此为了保持UI美观且响应迅速,我将这些操作放在第二个线程中。有一些可能(尽管不太可能)实例,该线程会挂起,永远阻塞。有没有一种简单的方法让我实现不涉及调用线程的"取消"按钮。中止()?我看到很多人建议不要使用它,我不想留下任何未发布的资源。也许是一种强制线程引发异常的方法?
我在标题中指定这不是后台工作者,因为程序不使用这些。它已经用普通的旧线程编码了。
我完全同意您需要修复损坏的评论,因为这是真正的问题,但如果您目前不能,并且需要继续操作。如果您使用的是 .Net 4.0,请使用任务库。您可以创建一个任务,并向其传递一个将在其他线程上执行的操作。关键是您可以将取消令牌传递给该任务。
http://msdn.microsoft.com/en-us/library/dd997396.aspx
如果您一遍又一遍地触发相同的操作,您还可以检查任务状态并对此执行一些操作。
//this is just a sample
if (myTask != null) //meaning it's still exe'ing your action
{
if (myTask.Status == TaskStatus.Faulted) //there's some kind of a problem with exe'ing it
myTask = null; // could reset to run the action again
else
return; //let the task finish
}
myTask = Task.Factory.StartNew (() =>
{
ExecuteUMyAction ();
});