如何在winform窗体关闭时结束所有创建的线程?

walkghost 2008-09-12 10:44:31

//在form_load里创建了一个线程用来每隔3S循环访问数据库,以检查有无需要处理的数据。
Thread ProcessMyJob = new Thread(StartProcess);
ProcessMyJob.ApartmentState = ApartmentState.STA;
ProcessMyJob.Start();

//线程要执行的方法:StartProcess
private void StartProcess()
{
//事务处理线程
while (true)
{
//Do something
//Thread.Sleep(3000);
}
}
//窗体右上角的关闭按钮
private void frmBrowser_FormClosing(object sender, FormClosingEventArgs e)
{

this.Dispose();//用dispose也不能杀死我创建的那个线程,请教各位,我该怎么办?
}


...全文
1283 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdgphc 2008-09-12
  • 打赏
  • 举报
回复
private Thread ProcessMyJob ;

...

form_load中:

ProcessMyJob = new Thread(StartProcess);
ProcessMyJob.ApartmentState = ApartmentState.STA;
ProcessMyJob.IsBackground = true ;
ProcessMyJob.Start();

FormClosing中:

Application.ExitThread();
walkghost 2008-09-12
  • 打赏
  • 举报
回复
谢谢各位,解决了。
walkghost 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jzywh 的回复:]
把 Thread ProcessMyJob 定义到类里面不要定义到Form_Load
[/Quote]
线程开始时运行此方法:StartProcess
错误说我必须引用静态方法,我要把这个方法声明成静态的。
walkghost 2008-09-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fazzamilan 的回复:]
Thread ProcessMyJob = new Thread(StartProcess);
ProcessMyJob.ApartmentState = ApartmentState.STA;
ProcessMyJob.Start();

不要聲明在form_load裡面,直接放在類下面
[/Quote]
出错:

错误 2 字段初始值设定项无法引用非静态字段、方法或属性“HtmlSnap.frmBrowser.StartProcess()” E:\多媒体发布系统\ConvertHTMLToImage\frmBrowser.cs 21 43 HtmlSnap




namespace HtmlSnap
{
public partial class frmBrowser : Form
{
Thread ProcessMyJob = new Thread(StartProcess);//这样创建?



maple0112 2008-09-12
  • 打赏
  • 举报
回复
ProcessMyJob.IsBackground = true
ProcessMyJob 被声明成局部变量,出了 from_load ,其他地方当然访问不了
jzywh 2008-09-12
  • 打赏
  • 举报
回复
把 Thread ProcessMyJob 定义到类里面不要定义到Form_Load
fazzamilan 2008-09-12
  • 打赏
  • 举报
回复
Thread ProcessMyJob = new Thread(StartProcess);
ProcessMyJob.ApartmentState = ApartmentState.STA;
ProcessMyJob.Start();

不要聲明在form_load裡面,直接放在類下面
fazzamilan 2008-09-12
  • 打赏
  • 举报
回复
private void frmBrowser_FormClosing(object sender, FormClosingEventArgs e)
{
if(ProcessMyJob.IsAlive)
{
ProcessMyJob.Abort();
}
}
walkghost 2008-09-12
  • 打赏
  • 举报
回复
汗,在form 的close里竟然访问不到我创建的线程: ProcessMyJob。这是为何?
sinoknight 2008-09-12
  • 打赏
  • 举报
回复
干脆用timer吧,呵呵,这样线程处理都省了,关闭的话,应该直接就销毁掉的
jzywh 2008-09-12
  • 打赏
  • 举报
回复
private void frmBrowser_FormClosing(object sender, FormClosingEventArgs e)
{
ProcessMyJob.Abort();
this.Dispose();//用dispose也不能杀死我创建的那个线程,请教各位,我该怎么办?
}
jzywh 2008-09-12
  • 打赏
  • 举报
回复
try

ProcessMyJob.IsBackground = true

110,566

社区成员

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

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

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