首页 新闻 会员 周边 捐助

高难度问题,望能合理解答

0
悬赏园豆:20 [已关闭问题] 关闭于 2012-12-20 13:49

public object GetA(string para){
Thread th=new Thread(new ParameterizedThreadStart(MethodA));
th.Start(th);//这个线程去做别的事情
return obj;
}
public void MethodA(object p){
//do something....
var th=p as Thread ;
th.Abort();
}
觉得这个方法GetA()到时候有没有问题

[秦时明月]的主页 [秦时明月] | 小虾三级 | 园豆:738
提问于:2012-08-28 15:21
< >
分享
所有回答(2)
0

觉得这个方法GetA()到时候有没有问题

那你应当先告诉我们什么算是有问题。你贴的程序有如下几个问题,不过可能都不是你关心的:

编译问题:1. GetA最后return obj; 可是obj是什么之前也没定义。

2. 我猜MethodA应该是个方法,但是你却声明成了class,是无返回值的方法还是什么?

运行期:th.Abort() 会抛出异常,不过你在你的主线程里捕捉不到(我猜你只是单纯想终止线程而已,不关心其他),因此你可以认为运行期没有异常抛出。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-08-28 16:47

管他返回什么,th.Abort(); 会报错?

支持(0) 反对(0) [秦时明月] | 园豆:738 (小虾三级) | 2012-08-28 16:49

@[秦时明月]: Thread.Abort方法总是会抛出异常,无论你写什么代码。但是它抛出的异常是在thread所在的线程栈上的,你在主线程无法获取到。你就是想结束这个线程是吗?你让他把代码执行完毕就可以了,不需要你手动去结束的。

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2012-08-28 20:17
0

GetA除了参数传进来没用之外,Thread所代理的MethodA怎么定义返回class,打错了吧?

不要把新建的th传进去,如果要操作,可以直接在MethodA中,调用Thread.CurrentThread.Abort,就可以了,因为这里执行MethodA要终止的线程就是执行它代码的线程,就是当前的线程。

 

明白了吗?

Ethan轻叹 | 园豆:996 (小虾三级) | 2012-08-28 17:09

搞什么啊.我现在要终止的就是新开启的线程

因为执行完毕了

支持(0) 反对(0) [秦时明月] | 园豆:738 (小虾三级) | 2012-08-28 17:11

@[秦时明月]: MethodA里面获取的Thread.CurrentThread就是你新建的线程。注意态度啊

支持(0) 反对(0) Ethan轻叹 | 园豆:996 (小虾三级) | 2012-08-28 17:12

@Ethan轻叹: 确实.我一样的终止他啊

支持(0) 反对(0) [秦时明月] | 园豆:738 (小虾三级) | 2012-08-28 17:20

@[秦时明月]: 就像楼上说的,你的终止恐怕是异常情况下终止线程的吧。try/catch加上去试试,有错不。

支持(0) 反对(0) Ethan轻叹 | 园豆:996 (小虾三级) | 2012-08-28 17:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册