前言 |
最近一直在帮着正在实习的师哥调错,类似于迅雷一样的一个工程,有上传还有下载,其中都是用线程来做的。里面有好多的代码都是看不懂的。现在有这样一个需求,通过线程ID,找到该线程,并杀掉。遇到这个问题,我想应该还可以,于是上网找答案,找了好久发现并没有我想要的答案,然后我换了另一种思路,解决了这个问题。首先我们先来了解一下线程的基本属性吧!
基础属性 |
- Thread.ManagedThreadId 获取线程的ID
- Thread.Start() 开启线程
- Thread.Suspend() 挂起线程
- Thread.Resume() 恢复挂起的线程
- Thread.Abort() 杀掉线程
- Thread.ThreadState() 线程运行的状态 Running 表示正在运行 Suspended表示已挂起
基本上这些是我们常用的一些属性和方法。
通过ID找到线程并杀掉 |
首先我先定义了一个字典,用来放线程的ID和线程
private static Dictionary<int, Thread> ThreadArray = new Dictionary<int, Thread>();
然后我们在开始一个线程的同时把线程ID和线程存到字典里,把线程ID存到数据库里
Thread ThreadUpload = new Thread(new ParameterizedThreadStart(Open));
ThreadtestID = ThreadUpload.ManagedThreadId;
ThreadArray.Add(ThreadtestID, ThreadUpload);
最后我们在想通过一个线程ID,挂起该线程或者摧毁该线程,就可以从数据库中拿到ID,去字典中把线程找出来。
string threadid = data.Tables[0].Rows[0][0].ToString(); //通过数据库获取线程ID
ThreadArray[Convert.ToInt32(threadid)].Suspend(); //挂起线程
总结 |
通过大兵师傅给的这次机会,很荣幸可以接触到别人设计的软件,再去和自己做的机房作比较,也看到了自己很多地方是欠缺的。自己的能力不够也没帮上什么忙,但是收获真的很大。宝剑锋从磨砺出,梅花香自苦寒来。还是需要慢慢的磨练!