无法通过使用播放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();
});
}