0
我最近遇到了一个问题,试图实现与视频捕获库和捕获卡实时视频捕获。非托管库在处理数据方面比我手动处理速度快得多,所以它似乎是一条可行的路。非托管库正在寻找控件更新的窗口句柄。将C#窗口句柄传递给非托管代码 - 跨线程异常
平台调用的源工作正常上一次性更新,当我用我自己的调用线程,所以我知道的类型是正确的,并且它的编组正常。
的主要问题是,当我试图线程操作和直接传递的窗口句柄非托管代码,我得到了可怕的“跨线程操作无效”异常。
我明白这个问题,只是不太清楚如何解决它。那么,当非托管代码只需要窗口句柄时,如何在控件上使用委托和“BeginInvoke()”方法?这甚至可以安排吗?
这里的非托管库功能的一个片段:
class Video
{
[DllImport("video.dll", EntryPoint = "imagePlot", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
private static extern int imagePlot(IntPtr windowHandle, byte[] imageBuffer);
private PictureBox _control;
public Video(PictureBox control)
{
_control = control;
}
public void CaptureAndUpdate()
{
// capture video
byte[] video = Capture();
// plot video
imagePlot(_control.Handle, video);
}
}