无法通过使用播放AForge

问题描述:

视频刷新图片框我使用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 '从其创建的线程以外的线程访问“ 这是什么?

作为异常提示,控件只能在创建它们的线程中进行操作。

在这里,您的主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(); 
    });  
}