for (int i = 0; i < CGlb.Instance().CountThreadsRedirected; i++)
{
CGetRedirectRawNewOld objNewOld=new CGetRedirectRawNewOld(list2StrStatus[i],i);
listRawNewOldObj.Add(objNewOld);
Thread t = new Thread(new ThreadStart(objNewOld.genRawNewOldList));
t.SetApartmentState(ApartmentState.STA);
m_listThreads.Add(t);
t.IsBackground = true;
t.Start();
}
int iDealedNum = 0;
while (true)
{
int iOldDealedNum = iDealedNum;
Thread.Sleep(30000);
iDealedNum = CGlb.Instance().CountRedirectedDealed;
if (iDealedNum==iOldDealedNum)
{
for (int i = 0; i < m_listThreads.Count;i++ )
{
m_listThreads[i].Abort();
}
break;
}
}
开了300个线程,下载网页,基本都在最后快下载完的时候程序界面就自己没了(调试状态,此时vc也还处于调试状态),然后在任务管理其中的进程还在,且无法结束任务,360任务管理器也无法结束,上面是主要代码,判断进程结束依据是已经下载的文件数量不再变化时退出所有线程。开始使用的join也是同样问题,后来用while循环也是,估计错误出在某个或者某些线程,请各位给个提示,这种问题通常是由什么原因引起的
2 个解决方案
#1
应用程序退出时直接Kill相关的线程即可。
#2
线程没关,所以进程中还有
#1
应用程序退出时直接Kill相关的线程即可。
#2
线程没关,所以进程中还有