线程问题 C#高手进

smaworm 2009-04-29 02:46:58
在主程序中,打开了一个窗体,当点击窗体上菜单时,开启一个线程提取记录,现在遇到的问题时,当关闭窗体时,如果线程还没有结束,如何结束这个线程? 高手帮忙 急
...全文
125 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xv8844 2009-04-29
  • 打赏
  • 举报
回复
不太懂,顶一个
C#经验交流群6624014期待大家的加入,共同学习共同进步
蓝海D鱼 2009-04-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 maplesept 的回复:]
Thread thread = new Thread(new ThreadStart(Run));
thread.IsBackground = true;
thread.Start();


try
{
//中断线程
thread.Abort();
}
catch { }


如果是WHILE循环的,建议条件用BOOL全局变量,让线程自己停止
[/Quote]up
soril 2009-04-29
  • 打赏
  • 举报
回复
刚好我也想问这个问题,多谢各位的解答
okishu 2009-04-29
  • 打赏
  • 举报
回复
调用thread.Abort方法时,在调用此方法的线程上引发 ThreadAbortException,
请处理次异常,譬如释放资源等。
a7758526 2009-04-29
  • 打赏
  • 举报
回复
1,设置一个标志位 bool bStop,把你的操作放在while(bStop)内
2,(不可取)检查thread.isAlive 然后强制abort,这样子可能会导致未清理的资源
mdq001 2009-04-29
  • 打赏
  • 举报
回复
设置成全局的不行么?


Thread th1=null;

//click事件中
th1=new Thread(new ThreadStart(methodname))
th1.start();
maplesept 2009-04-29
  • 打赏
  • 举报
回复
不是全局变量怎么操作啊,要么放自定义线程池里

或者你干脆用系统的线程池
smaworm 2009-04-29
  • 打赏
  • 举报
回复
1楼:设置也没有效果
2楼:th1 不是全局的 是点击菜单的时候才创建的。
maplesept 2009-04-29
  • 打赏
  • 举报
回复
Thread thread = new Thread(new ThreadStart(Run));
thread.IsBackground = true;
thread.Start();


try
{
//中断线程
thread.Abort();
}
catch { }


如果是WHILE循环的,建议条件用BOOL全局变量,让线程自己停止

mdq001 2009-04-29
  • 打赏
  • 举报
回复

protected override void OnFormClosing(FormClosingEventArgs e)
{
if(th1.IsAlive)
th1.Abort();
base.OnFormClosing(e);
}
soaringbird 2009-04-29
  • 打赏
  • 举报
回复
设置线程的IsBackground 属性为true,切记

110,538

社区成员

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

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

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