无法通过使用 AForge 播放视频来刷新图片框



i使用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线程,还有来自AForge的视频阅读器线程。在video_NewFrame中运行的代码在读取器线程上,不能直接调用控件上的方法。

请参阅此处了解更多详细信息。你必须沿着以下路线做一些事情:

private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
    Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
    this.Invoke((MethodInvoker)delegate
    {
        pictureBox1.Image = bitmap;
        pictureBox1.Refresh();
    });      
}

最新更新