后端使用多线程问题
for (int i = 0; i < dtEmp.Rows.Count; i++)//循环每一个人
{
string empid = dtEmp.Rows[i]["Employeeid"].ToString();
string deptcode = dtEmp.Rows[i]["deptcode"].ToString();
string cnname=dtEmp.Rows[i]["CNname"].ToString();
//实例化一个带参和返回的线程类
EmployeeLineShow employeeLineShow = new EmployeeLineShow(empid,deptcode,cnname,role,Contoltype,doall,i,this.Context,dt);
Thread t = new Thread(employeeLineShow.EmpExecution);
t.IsBackground = true; //注意这里
t.Start();
threadList.Add(t);
EmployeeLineShowList.Add(employeeLineShow);
}
for (int i = 0; i < threadList.Count; i++)
{
Thread t = (Thread)threadList[i];
t.Join();
t.Abort();
}
for (int i = 0; i < EmployeeLineShowList.Count;i++ )
{
EmployeeLineShow employeeLineShow = EmployeeLineShowList[i];
tr11 += employeeLineShow.TrMiddle;
trleft += employeeLineShow.TrLeft;
trright += employeeLineShow.TrRight;
}
1. t.IsBackground = true;如果我这个不定义,则表示是前端线程,不会随主线程消亡而消亡,但是我后面有t.Abort()为什么还是不结束啊?导致出现异常情况。
2. 我现在这样设置,如果很多人同时访问站点时,是否也会出现问题? 可能同时产生好几个访问主线程情况。
有这方面资料的请给我留点啊。菜鸟困惑中
多线程 后端 --------------------编程问答-------------------- 无人问津? 还是问题都不会啊? --------------------编程问答-------------------- LZ:
1.abort()的功能是用来终止调用此办法的线程的,只是在多半景象下,它须要一点时候,有些延迟(可能在短时候内此线程还在履行)...
2.join()办法它的功能不是终止线程,而是在t线程终止之前,阻拦正在停止(调用了abort()办法但还未停止)的t线程履行,同时使主线程守候,直到t线程终止(也就是abort()办法终止过程完毕)了再履行下面的代码,打印出来的成果,履行状况就为FALSE,线程状况也为停止了 --------------------编程问答--------------------
谢谢,现在页面后台主线程 使用多线程,会导致服务器端出现各种问题。 --------------------编程问答-------------------- Join和Abort你只需要用其中之一就行。LS已经解释了,你的需求应该是想调用Abort()
等到执行Abort的时候,线程已经执行完毕停止了,强行终止线程有时会导致内存泄漏,是不推荐的做法
你的需求,可以在employeeLineShowk中定义一个bool字段或者一个类,用来标识线程执行过程中的各种状态
在线程里执行的EmpExecution方法中判断这个字段的状态
--------------------编程问答--------------------
谢谢,好像问题没问好,其实不是说这2个函数应用的问题,是网页后端用多线程,各页面出现很多异常。 --------------------编程问答-------------------- 你去看一下Abort()方法的详细说明,本身就是要抛异常的
http://msdn.microsoft.com/zh-cn/library/ty8d3wta(v=vs.90).aspx
补充:.NET技术 , ASP.NET