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