首页 新闻 会员 周边 捐助

对C#线程的几个小问题

0
[已解决问题] 解决于 2017-07-20 23:31

线程如果从上而下执行完之后,是不是会自动释放掉?Abort()方法是不是强制线程结束释放?

一路向前而已的主页 一路向前而已 | 菜鸟二级 | 园豆:203
提问于:2017-06-29 11:53
< >
分享
最佳答案
0

1.是,但线程池中的线程不一定是

2.是,但线程中有一定几率通过ResetAbort恢复(catch ThreadAbortException)

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10424 | 2017-06-29 13:52

回复?可以吧结束的线程回复吗?

一路向前而已 | 园豆:203 (菜鸟二级) | 2017-06-29 14:18

@一路向前而已: Abort只是在线程执行中插入一个特殊的ThreadAbortException,可以通过线程对应的委托方法catch到后去resetabort取消abort。Abort可不是说要abort就能abort掉的,有些特殊的代码是无法abort掉的,比如CriticalSection对应的代码块

Daniel Cai | 园豆:10424 (专家六级) | 2017-06-29 16:38

@Daniel Cai: 有点糊涂了 你说的这个resetabort方法是自己用try catch捕捉后在catch块加入的?

一路向前而已 | 园豆:203 (菜鸟二级) | 2017-06-29 16:52

@一路向前而已: 

var td=new Thread(()=>{

bool flag=true;

while(flag)

{

  try{

  Thread.Sleep(100);

  }

  catch(ThreadAbortException)

  {

    Thread.ResetAbort();
        flag=false;

  }

}
Console.WriteLine ("abort reset");

});
    td.Start();
    Thread.Sleep(1000);
    td.Abort();

Daniel Cai | 园豆:10424 (专家六级) | 2017-06-29 18:03

@Daniel Cai: 恩 这样就释放不了了

一路向前而已 | 园豆:203 (菜鸟二级) | 2017-06-29 18:06

@一路向前而已: 这个最后线程执行完了会被回收掉啊。

Daniel Cai | 园豆:10424 (专家六级) | 2017-06-29 18:10

@Daniel Cai: 你QQ多少 能加一下 吗?

一路向前而已 | 园豆:203 (菜鸟二级) | 2017-06-29 19:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册