子线程里有循环,如何立即终止线程?

phuai007 2011-12-31 09:15:53

private void button1_Click(object sender, EventArgs e)
{
label10.Text = "正在打开目标地址,请稍后..";
label10.Refresh();
button1.Enabled = false;
thread2 = new Thread(post);
thread2.Start();
}
/// <summary>
/// 回帖操作
/// </summary>
private void post()
{
....
//这里是循环回帖
}

//终止线程

private void button2_Click(object sender, EventArgs e)
{
//停止工作
try
{
thread2.Abort();
button1.Enabled = true;
webBrowser.Visible = false;
label10.Text = "停止运行";
label10.Refresh();
}
catch
{
MessageBox.Show("已经是停止状态");
}
}


发现不能立即停止线程工作,因为有循环还没完成,点了停止也没用,怎么操作才能立即停止子线程,包括它里面的循环都终止,也就是一点停止按钮,整个线程就立即停止工作。
...全文
395 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
机器人 2011-12-31
  • 打赏
  • 举报
回复
Abort不会立即被执行,尤其是在CPU被占用的时候。
phuai007 2011-12-31
  • 打赏
  • 举报
回复
还有个问题,按上面的做法就不需要 thread2.Abort();这句了吗?
phuai007 2011-12-31
  • 打赏
  • 举报
回复
成功了,谢谢楼上,结贴给分
phuai007 2011-12-31
  • 打赏
  • 举报
回复
嘿。楼上的办法不错,试试去
机器人 2011-12-31
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
label10.Text = "正在打开目标地址,请稍后..";
label10.Refresh();
button1.Enabled = false;
isAbort = false;
thread2 = new Thread(post);
thread2.Start();
}

/// <summary>
/// 回帖操作
/// </summary>
private void post()
{
....
//这里是循环回帖
for(...)
{
if (isAbort)
return;

...
}
}

//终止线程
private void button2_Click(object sender, EventArgs e)
{
//停止工作
try
{
isAbort = true;
button1.Enabled = true;
webBrowser.Visible = false;
label10.Text = "停止运行";
label10.Refresh();
}
catch
{
MessageBox.Show("已经是停止状态");
}
}

110,578

社区成员

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

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

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