2014-10-22 57 views
0

視頻刷新圖片框我使用AForge庫無法通過使用播放AForge

private void button1_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog opd = new OpenFileDialog(); 

     if (opd.ShowDialog() == DialogResult.OK) 
     { 
      FileVideoSource videoSource = new FileVideoSource(opd.FileName); 
      videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame); 
      videoSource.Start(); 
     } 
    } 

    private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) 
    { 
     Bitmap bitmap = eventArgs.Frame; 

     pictureBox1.Image = bitmap; 
     pictureBox1.Refresh(); 
    } 

但本着「pictureBox1.Refresh」我有一個異常「跨線程操作無效打開視頻文件:控制「pictureBox1 '從其創建的線程以外的線程訪問「 這是什麼?

回答

0

作爲異常提示,控件只能在創建它們的線程中進行操作。

在這裏,您的主UI線程創建了Form和Control,並且您有來自AForge的視頻閱讀器線程。在video_NewFrame中運行的代碼位於讀取器線程中,不能直接調用控件上的方法。

See here瞭解更多詳情。你必須沿着這些路線做點什麼:

private void video_NewFrame(object sender, NewFrameEventArgs eventArgs) 
{ 
    Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone(); 

    this.Invoke((MethodInvoker)delegate 
    { 
     pictureBox1.Image = bitmap; 
     pictureBox1.Refresh(); 
    });  
}