繁体   English   中英

“实时”更新WPF控制

[英]Updating WPF control in “real time”

我正在编写一个应用程序,它将显示相机看到的当前图像,它需要实时更新显示的图像或接近它。 本质上,我有一台可以捕获图像的相机,我需要每隔一秒钟捕获一个图像,然后将该图像显示在屏幕上。 当前,我的应用程序具有Image控件,我正在从相机捕获BitmapImage并将其设置为Image.Source。 我的麻烦是让它不断更新。 不幸的是,我没有处理这样的事情的经验,这些事情必须永远进行更新(或者直到我正在编写的应用程序被关闭),老实说,似乎几乎没有(我已经发现了) Web有关在WPF / C#中执行类似的操作。 我怀疑我必须生成一个线程来执行图像捕获,但是老实说,这是我的问题的一部分-我对线程的使用经验很少,并且对所有工作原理有些困惑。 非常感谢您提供的任何帮助。

要使数据绑定正确更新,可以使用INotifyPropertyChanged 只需添加对System.ComponentModel的引用即可:

using System.ComponentModel;

然后继承接口:

MyWindow : INotifyPropertyChanged

然后添加以下代码:

public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged(String info)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(info));
    }
}

最后,添加要绑定到的属性。

private BitmapImage currentImage;
public BitmapImage CurrentImage{get{return currentImage;} set{currentImage=value;NotifyPropertyChanged("CurrentImage");}}

最后,在您的xaml中,将绑定更改为{Binding CurrentImage},然后对于窗口,将数据上下文设置为相对源self ...这将是窗口的属性:

DataContext="{Binding RelativeSource={RelativeSource Self}}"

那应该使绑定正常工作。 在单独的线程上执行操作将需要调度程序

您应该阅读WPF中的数据绑定。 一旦更改绑定的数据项,WPF就会充满观察者模式,以更新显示。 您正在更改Image.Source而不是更改图像内容的事实可能会使您感到困惑。 您需要在XAML中将图像控件设置为数据绑定到位图对象(可能是表单的字段),然后根据需要更改或重新加载位图对象。 数据绑定的图像控件应随位图对象的每次更改自动重绘自身。

由于提到了后台线程,因此需要注意仅在UI线程上修改UI元素(图像,位图)的属性。 如果您在后台线程中收到新图像并想在UI中显示它,则需要将该更新同步到UI线程。 请参阅Dispatcher .Invoke()

我处于类似的情况,除了通过WCF将图像传递给WPF客户端。 因此,我设置了一个计时器,并每1秒钟调用一次WCf服务。 但是,当我将ImageSource分配给bitmapImage时,图像闪烁,如出现白色屏幕,图像,白色屏幕,图像如何使其连续?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM