主线程如何控制子线程的问题

chlei 2010-01-20 03:33:04
现在在做一个把网页生成图片的批处理,每次处理200左右个网页

主线程里面启动子线程,每个子线程生成一个图片,
但是希望在主线程里面能够控制子线程,如果网页读取超时的话,
就结束子线程,但是总是不能正常结束。
有时候子线程抛出异常,主线程也结束了。

帮我看看下面的代码有没有问题,如果有,需要怎样修改

for (int i = 0; i < list.Rows.Count; i++)
{
try
{

DataRow row = list.Rows[i];
..................

ImageThread imageThread = new ImageThread(URL);
ThreadStart threadStart = new ThreadStart(imageThread.makeImage);
Thread thread = new Thread(threadStart);
thread.Start();
Thread.Sleep(60000);

if (thread.ThreadState == ThreadState.Stopped && imageThread.STATUS == 0)
{
//成功处理
}
else
{
int times = 3;
while (thread.ThreadState == ThreadState.Running && times != 0)
{
Thread.Sleep(20000);
times--;
}
thread.Abort();
}

}
catch (Exception ex)
{
//错误处理
}
}
...全文
296 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
用信号量来实现,abort作用很有限
lovexilove 2010-01-21
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
7楼思路可行,另外,你可以参考一下.net 4.0中的并行处理。
leonbyron 2010-01-21
  • 打赏
  • 举报
回复
你现在的写法用线程就没什么意义。 子线程工作的时候主线程睡眠。没有什么并行可言。另外结束线程不是一声不响从背后捅人一刀。 你要对人说你干的太久了,不要搞了。而且说完了还要等他真正停手。
灵雨飘零 2010-01-21
  • 打赏
  • 举报
回复
up
liujichang1727 2010-01-21
  • 打赏
  • 举报
回复
thread.Abort(); 带来的效果是不确定的。如果线程正在运行,调用Abort则会触发异常,那就会跑到主线程catch里面了
ztenv 2010-01-21
  • 打赏
  • 举报
回复
Thread.Sleep(60000);
//你的代码保证了同一时刻只有一个线程在执行,,,,,,
if (thread.ThreadState == ThreadState.Stopped && imageThread.STATUS == 0)
{
//成功处理
}
else
{
int times = 3;
while (thread.ThreadState == ThreadState.Running && times != 0)
{
Thread.Sleep(20000);
times--;
}
thread.Abort();


给你个建议:线程中使用事件或信号量,当线程执行完时触发一个事件告诉主线程你执行完了,主线程循环检测他所创建的线程队列,有超时的结束掉,线程能在超时时间内返回结果的,则接收结果对其进行处理,这样提高了并发效率,

sknice 2010-01-21
  • 打赏
  • 举报
回复
up
LutzMark 2010-01-21
  • 打赏
  • 举报
回复
thread.Abort(); 是不确定的
用异步线程或者BackgroundWorker来做吧
bychgh 2010-01-21
  • 打赏
  • 举报
回复
帮顶
chlei 2010-01-21
  • 打赏
  • 举报
回复
up
chlei 2010-01-20
  • 打赏
  • 举报
回复
up
tzs2304 2010-01-20
  • 打赏
  • 举报
回复
up

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧