分享到: 百度 更多

[转载]解决多线程中执行CreateHandle()时无法调用值Dispose()

代码如下:
namespace Adt850
{
public partial class frmMain
{
Thread MyThread;
int val,val1,speed;
public frmMain()
{
initializeComponent();
CheckforIllegalCrossThreadCalls=false;
MyThread=new Thread(new ThreadStart(ThreadSet));
MyThread.Start();
}
private void ThreadSet()
{
while(true)
{
adt850_a.get_command_pos(0,1,out val);//调用dll函数
txtGetLocationX.Text=Convert.ToString((float)5*val/300);
adt850_a.get_command_pos(0,2,out val1);
txtGetLocationY.Text=Convert.ToString((float)5*val1/300);
adt850_a.get_speed(0,1,out speed);
txtGetSpeed.Text=Convert.ToString(speed);
}
}
}
}

在退出程序时,会发生objectDisposeException异常
和执行CreateHandle()时无法调用值Dispose()的错误

是什么原因???
 
解决办法:
窗口在要关闭时你的线程却还没有退出是吧?这样不行.将线程设置成isBackground=true;然后在窗口关闭时调用线程的中断执行函数.或在While中加上检查this.isDisposed的信息.
 
//////////////////////////
在窗体的Load时怎么退出窗体

打开某窗体frm1,此窗体打开的条件是必须存在某个值,所以在打开此窗体时,需要在OnLoad事件中
打开另外一窗体frm2进行选择。

现流程如下:
1.在frm2中选择到值,直接把值传入frm1使用,没有什么问题。
2.在frm2中未选择到值,需要在关闭frm2的同事,也在关闭frm1,因为frm1执行的条件是必须存在此值。

上述问题2中的用普通的this.close方法不能实现,错误信息如下:
this.Close() 或 this.Dispose()时 都会出错:
"执行 CreateHandle() 时无法调用值 Dispose()"
"执行 CreateHandle() 时无法调用值 Close()"

因为在OnLoad事件中,当前窗体的句柄Handle还没有创建完成
所以不能直接进行关闭操作,变通的实现方法如下:

protected override void OnVisibleChanged(EventArgs e)
{
base.OnVisibleChanged(e);
if (条件)
this.Close();
}
也可以重写 OnShown 或者在 Shown 事件响应中写。

转自:

http://bbs.bccn.net/thread-225000-1-1.html

http://www.cnblogs.com/linfuguo/archive/2007/01/10/616539.html

if (!= jQuery) { = jQuery.noConflict(); } var isLogined = false; var cb_blogId = 13416; var cb_entryId = 616539; var cb_blogApp = "linfuguo"; var cb_blogUserGuid = "46a3310b-63cf-dd11-9e4d-001cf0cd104b"; var cb_entryCreatedDate = '2007/1/10 12:06:00';
posted @ 2012-08-09 00:27  黑马_Summer  阅读(7168)  评论(0编辑  收藏  举报
分享到: 百度 更多