backgroundWorker.CancelAsync取消操作

小菲1215 2009-07-31 01:28:11
为什么执行了backgroundWorker.CancelAsync,线程还是在运行呢,请问有什么更好的办法吗?
...全文
1241 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
神秘_博士 2012-10-30
  • 打赏
  • 举报
回复
http://www.csharpwin.com/csharpspace/2460.shtml
神秘_博士 2012-10-30
  • 打赏
  • 举报
回复
worker.WorkerSupportsCancellation = true;这个要设置为true 否则调用CancelAsync();异常
lihaMIMI 2012-10-29
  • 打赏
  • 举报
回复
晕死,退出终止线程应该用 exit sub 即可。不存在在线程内用e.Cancel = true的问题
摸着石头前行 2012-10-23
  • 打赏
  • 举报
回复
我也遇到这个问题,求教!上面提到的
if (worker.CancellationPending)
{
e.Cancel = true;
}
都有判断,
调试发现CancelAsync();被执行了多次,循环还在继续。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hbxtlhx 的回复:]
CancelAsync 提交终止挂起的后台操作的请求,并将 CancellationPending 属性设置为 true。
你需要读取这个属性,例如:

if (worker.CancellationPending)
{
e.Cancel = true;
}
[/Quote]
这样似乎还是报错啊,并不能终止线程
LQknife 2009-07-31
  • 打赏
  • 举报
回复
不会终止线程只是把标志位设为true
然后你根据这个标志位中断执行流程
huwei001982 2009-07-31
  • 打赏
  • 举报
回复
CancelAsync 仅仅是把 BackgroundWorker.CancellationPending属性 赋为 true, 并不能终止线程的执行

所以你需要在线程中判断 BackgroundWorker.CancellationPending属性, 如果为 true, 则退出线程

北京的雾霾天 2009-07-31
  • 打赏
  • 举报
回复
CancelAsync 提交终止挂起的后台操作的请求,并将 CancellationPending 属性设置为 true。
你需要读取这个属性,例如:

if (worker.CancellationPending)
{
e.Cancel = true;
}
北京的雾霾天 2009-07-31
  • 打赏
  • 举报
回复
你需要在你的线程里读取这个属性用来使线程退出。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧