2013-10-18 61 views
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); 
     } 
    } 

回答

0

只能从主UI线程的UI元素更改属性。检查这url,

相关问题