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);
}
}