首页 新闻 会员 周边 捐助

C#中有没有方法得知一个线程是主线程还是子线程

0
[已解决问题] 解决于 2013-01-05 10:32

C#中有没有方法得知一个线程是主线程还是子线程

微澜的主页 微澜 | 初学一级 | 园豆:-1
提问于:2013-01-05 08:53
< >
分享
最佳答案
0

根据上面的问题,知道你只是想知道某块代码是主线程还是辅助线程运行的。这个问题只要在指定代码块上断点,再借助下调试工具vs中:调试-窗口-线程以及Thread.CurrentThread.ManagedThreadId属性就可以判断是哪个线程运行的了

调试工具如图:

奖励园豆:5
滴答的雨 | 老鸟四级 |园豆:3660 | 2013-01-05 10:08
其他回答(3)
1

开启线程的时候,可以给线程起一个名字的。

chenping2008 | 园豆:9836 (大侠五级) | 2013-01-05 08:55
0

通过线程的ID来判断,因此你首先需要知道主线程的ID,有多种方法,有用快照去第一个线程的,也有按创建时间来取的,也有按入口点地址来取的,但是前面两种方式的正确性无法证明,下面这篇文章可以参考:

http://www.codeproject.com/Questions/78801/How-to-get-the-main-thread-ID-of-a-process-known-b

我想问一句,你真的是想这样做吗?你能不能说说你的需求,或许并不是你理解的这样。

Launcher | 园豆:45050 (高人七级) | 2013-01-05 09:57

可能是我表达的不清楚,是这样的,在程序里我开启了一个子线程,但是在调试的过程中发现并没有实现多线程的目的,所以我想确认下我开的这个子线程到底是在子线程运行的还是在主线程运行的

支持(0) 反对(0) 微澜 | 园豆:-1 (初学一级) | 2013-01-05 10:00

@微澜: 线程是平级的,没有主次之分。我把你的这句话翻译下:在程序里我开启了一个子线程——在线程 A 中创建线程 B,虽然 A 创建了 B,但是OS并不认为 A 与 B 有任何父子关系。因此此关系需要你自己在代码中标识,也就是你在 A 线程中创建线程 B 时,你需要把线程 A的ID通过参数传递给线程B,线程B中运行的方法体通过此ID和当前线程ID来判断运行此方法体的线程是 A,还是不是 A(注意,我这里没说是B)。

 

“子线程到底是在子线程运行的还是在主线程运行”,这句话的表述是错误的,请复习下线程的知识。

支持(1) 反对(0) Launcher | 园豆:45050 (高人七级) | 2013-01-05 10:06

@Launcher: --!好吧.我已经晕圈了....你给翻译的我试试看

支持(0) 反对(0) 微澜 | 园豆:-1 (初学一级) | 2013-01-05 10:26
1

在确定是主线程运行的地方,给Thread.CurrentThread.Name赋值

后面就可以通过对比Name来判断了

蜗牛往前走 | 园豆:389 (菜鸟二级) | 2016-04-11 12:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册