作者Peruheru (还在想)
看板Visual_Basic
标题[.NET] 执行绪终止的一问
时间Fri Apr 24 00:51:02 2009
请输入专案类型(网站专案或者应用程式专案):应用程式专案
因为希望我做的这个程式在执行模拟运算时
整个程式不要像当掉一样没有回应
也希望能看到执行的进度
不管是以後给人用还是我自己侦错时都比较方便观察
所以我弄了一个执行绪
专门执行这个可能会耗上长时间的运算
然後透过Delegate和判断Me.InvokeRequired的值
将目前进度,以及要显示的讯息使用Me.Invoke传回到Form上显示给使用者看
(因为原本直接修改控制项的值,会显示跨执行绪存取的错误,
所以在网路上找到这个方法,可以解决这个跨执行绪存取的问题)
然後现在的问题是
假如在执行绪执行时,尚未结束前就关闭程式
就会留下一个没有关闭的执行绪
还得要打开工作管理员手动关闭这个执行绪(的程式)
我试着在Form的关闭事件中
检查执行绪的状态之後,假如为执行中就使用.Abort的方法想关闭执行绪
但是此时就会出现错误,发生在我的Delegate连结的Sub中(还是应该要反过来说才对?)
错误内容是"无法存取已处置的物件"
看起来应该是表示说,因为我已经把Form1给关闭了
所以没办法执行它的Invoke方法?
我上网稍微看了一下关於执行绪的关闭处理
有看到一篇内容是说後面还要加上该执行绪的.Join方法
封锁该执行绪,会比较容易关闭
但是这样一来,执行绪好像会卡着无法关闭,虽然不会出现错误啦
我想问题没有解决
应该还是卡在 无法在已关闭的Form上 执行.Invoke方法的问题上
想请问,有什麽方法可以正确的终止整个程式呢?
--
早先在练习写可以透过TcpClient和TcpHost传递讯息的程式时
也是为了让程式可以顺畅点而使用了执行绪
结果也是遇上这个问题,执行绪没有执行完成会没法子正常终止
当时还没有使用Delegate呢,情况单纯多了
但是在Form的关闭事件中加入.Abort方法也是无法终止该执行绪
只是当时反正是自己写有趣的,没真的去解决这问题
现在不知怎麽解决了...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.163.87
1F:推 Marty:我想可能是该Thread中有其他的物件还没有正确的释放.. 04/24 07:55
2F:→ Marty:例如TcpClinet还没有断线之类的... 04/24 07:56