参考资料:https://www.cnblogs.com/idea555/articles/14808605.html
https://blog.csdn.net/baidu_38995168/article/details/115478182
今天关闭一个窗体,报出这样的一个错误:
"在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。"。
这个不用多想,肯定是那个地方没有释放掉。
winform最常见的是datagridview这个控件,不管重写还是怎么,很多数据的操作都是用datagridview来展示的,因此,它的异步调用也算是比较多的一类了。
比如:
不用异步肯定会出现死机的情况,用了异步可能也要注意一些情况:
增加了一条判断语句,解决问题
if (IsDisposed || !this.IsHandleCreated) return;
部分程序
Bitmap bitmap = new Bitmap((int)ImageInfo.iWidth, (int)ImageInfo.iHeight, (int)ImageInfo.iWidth * 3, PixelFormat.Format24bppRgb, pRGBFrame);
if (m_isNeedSave)
{
bitmap.Save("d:\\camera_test1.bmp");
m_isNeedSave = false;
}
//////////////////////////////////显示
if (IsDisposed || !this.IsHandleCreated) return;
///////
this.BeginInvoke(new Action(() =>
{
this.pictureBox.Image = bitmap;
}));
//释放由 CameraGetRawImageBuffer 获得的缓冲区
CKAPI.CameraReleaseFrameHandle(m_hCamera, hBuf);
}
CKAPI.CameraPause(m_hCamera);