2013-10-18 52 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,

相關問題