作者leo60037 (Pon)
看板C_Sharp
标题Re: [问题] 请教thread问题
时间Sun Aug 10 12:44:27 2008
※ 引述《proach (p.roach)》之铭言:
: ※ 引述《powertodream (The Beginning)》之铭言:
: sorry, 顺便请教类似的问题。
: 我在 RS232接收程式中,用 delegate来接收资讯,每次收到新资讯,
: 就另外发出一个 delegate去解封包,绘图,封包内容计算时间有点长,
: 也许同时有两三个 delegate发出去了同时在执行。因为我要结束程式时,
: 都会出现错误讯息,必须预先把 serialPort关闭,等个100ms,
: 才能安全关闭没有错误。
: 请问我在 Form_Close时,是否有方法可以将所有执行中的 delegat
: 都关闭之,或是将任何其他 thread都关闭的方法?
当你关闭 Form 的时候 thread 依然还在执行
可是 Form 却已经把一些物件释放掉了
此时如果 thread 存取到那些物件
错误就会跑出来跟你 say hello !!
照你提供的资讯来看
thread 中执行的 method 会在有限步骤中结束
既然会结束,那就只需要让 Form 等它一下就好了
首先在 class hello 宣告
private object form;
public hello(object form)
{
this.form = form;
}
接着修改 add()
public void add()
{
Monitor.TryEnter(form);
...
Monitor.Exit(form);
}
使用 Thread
new Thread(new ThreadStart(new hello(this).add)).Start();
最後在 Form_Close 中加入
this.Visible = false;
while (!Monitor.TryEnter(this))
Application.DoEvents();
表单隐藏起来眼不见为净
等 thread 跑完表单就会真正关闭了
试看看吧 ^.<
--
程式设计师的四不一没有:
操不死、骂不退、穷不怕、加班不停、没有前途
程式设计师的工作内容:
钱少、事多、离家远
位低、权轻、责任重
睡觉睡到做恶梦、哈钱哈到脑抽筋
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.115.73.248