winform中多线程的thread abort问题,有时整个页面会卡死

helloWorld1209 2011-05-05 02:08:36
winform里有2个button,一个是start,一个是stop。

点击start button时,会启动一个新的线程去做相应的操作。
想实现点击stop时,把刚才的线程kill掉,现在是使用的thread.Abort()方法。

已经在线程里捕获了ThreadAbortException,所以不会有其他异常。

但是问题是:比如点一下start,等线程正在运行的时候再点stop。这个操作我做10次的话,基本上会有一次是把整个winform窗体卡住了,请问是为什么?怎么解决?

有朋友说尽量不要用Abort()方法,可以设置个标志位去告诉线程结束,可是我这个线程是个耗时的方法,我想立即就让它结束,设置标志位还要等一段时间才能结束。

另外还有个小问题,我在windows_closed()方法里也调用了abort()方法,就是说每次关闭的时候关闭线程,这个就从来没有出过问题,难道还有优先级的情况?
...全文
1106 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
syxsyx7 2011-05-09
  • 打赏
  • 举报
回复
thread.IsBackground = true;
helloWorld1209 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jonnysun 的回复:]
线程和Stop按钮加几个Application.DoEvents()试试
[/Quote]

试了,不行,一样的。
helloWorld1209 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 syxsyx7 的回复:]
thread.IsBackground = true;
[/Quote]

这个属性一直都是设置为ture的,也不行
  • 打赏
  • 举报
回复
多线程是很tricky的,总有这样或者那样的小问题。
如果你线程里面运行的程序是相对独立的,可以考虑把那个线程做成一个进程。每次start启动进程,stop杀掉进程,这样不会有问题了。
  • 打赏
  • 举报
回复
线程和Stop按钮加几个Application.DoEvents()试试

111,113

社区成员

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

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

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