我有一个简单的WPF应用程序,我在其中打开网络摄像头并将其设置为每秒30帧,如下所示:
webcam = new WebCamCapture();
webcam.FrameNumber = ((ulong)(0ul));
webcam.TimeToCapture_milliseconds = FrameNumber;
webcam.ImageCaptured += new WebCamCapture.WebCamEventHandler(webcam_ImageCaptured);
此应用程序在ImageControl中显示相机预览(每秒30帧)。
在图片框下方,我是一个TextBox
<TextBox Name="txtMsg" HorizontalAlignment="Left" Width="214" Height="22" Margin="0,260,0,0" TextWrapping="Wrap" VerticalAlignment="Top"></TextBox>
现在,当我尝试输入文本框时,需要几秒钟才能回复。有时我按键几次,但没有得到回应。如果我延迟相机捕捉事件(例如每秒1帧),它可以正常工作。
我的问题是我如何经常更新UI,但同时在TextBox中获得快速响应。
感谢。
答案 0 :(得分:1)
网络摄像头对象正在UI Thread
中运行。以下是一个示例,如何在单独的Thread
中启动它。请注意,因为ImageCaptured
事件是在后台Thread
中触发的,因此您必须调用Dispatcher
。
private void _StartWebCam()
{
ThreadStart webCamThreadStart = () =>
{
webcam = new WebCamCapture();
webcam.FrameNumber = ((ulong)(0ul));
webcam.TimeToCapture_milliseconds = FrameNumber;
webcam.ImageCaptured += new WebCamCapture.WebCamEventHandler(webcam_ImageCaptured);
};
Thread threadnameThread = new Thread(webCamThreadStart) { IsBackground = true };
threadnameThread.Start();
}
private void webcam_ImageCaptured(object sender, EventArgs eventArgs)
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
//Set you captured Image to your ImageControl
}));
}