2016-02-07 15 views
1

在使用DirectShow和aforge从网络摄像头捕获图像并将它们显示在图片框中时,我会遇到一些麻烦,即使经过多次尝试,我也会得到相同的错误。目前在c使用aforge时使用ELSEWHERE#

这是我的代码。

public void video_NewFrame(object sender, NewFrameEventArgs EventArgs) 
    { 
     pictureBox1.Image = (Bitmap)EventArgs.Frame.Clone(); 
    } 

但我也有试过这种

public void video_NewFrame(object sender, NewFrameEventArgs EventArgs) 
    { 
     lock (EventArgs) 
     { 
      pictureBox1.Image = (Bitmap)EventArgs.Frame.Clone(); 
     } 
    } 

public void video_NewFrame(object sender, NewFrameEventArgs EventArgs) 
    { 
     lock (pictureBox1) 
     { 
      pictureBox1.Image = (Bitmap)EventArgs.Frame.Clone(); 
     } 
    } 

不管我怎么努力,我送花儿给人得到这个错误

error

我AC实际的代码是这样的,它可以工作,但我不喜欢它,因为它只是一种忽略问题的方式,我想解决这个问题。

public void video_NewFrame(object sender, NewFrameEventArgs EventArgs) 
    { 
     try 
     { 
      pictureBox1.Image = (Bitmap)EventArgs.Frame.Clone(); 
     } 
     catch 
     { 
     } 
    } 

非常感谢您的帮助。 我最诚挚的问候, 塞尔吉奥·大卫·梅尔卡多维拉

回答

0

我不知道为什么,这是必要的,但你应该使用调用:

public void video_NewFrame(object sender, NewFrameEventArgs EventArgs) 
    { 
     Invoke(new Action(() => 
       { 
      pictureBox1.Image = (Bitmap)EventArgs.Frame.Clone(); 
     })); 
    }