首页新闻找找看学习计划

WPF使用MVVM数据绑定时,UI未能及时更新

0
悬赏园豆:5 [已关闭问题] 关闭于 2019-11-06 11:15

现在项目中使用有添加扫描件的功能,即将扫描仪中的图像保存下来。现在的问题是,在点击了程序中的“扫描”按钮后,在扫描仪扫描完成了,如果这时程序的窗口不是windows的活动窗口,比如切换到另外一个程序时,窗口绑定的扫描图像没有自动更新(可以看到绑定源已经更新了),这时再切换来回来时也不会更新,只有在窗口中的某个可以获取焦点的控件上移动一下鼠标什么的,UI就自动刷新了,这是哪里问题呢?

“扫描”按钮绑定的事件如下

 public ICommand cmdScanFile
            {
                get
                {
                    return new DelegateCommand<string>((arg) =>
                    {
                        var bg = new BackgroundWorker();
                        bg.DoWork += (a, b) =>
                        {
                            try
                            {
                                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                                {
                                    StartScan();
                                }), DispatcherPriority.ApplicationIdle);
                            }
                            catch (Exception ex)
                            {
                            }
                            finally
                            {
                            }
                        };
                        bg.RunWorkerAsync();
                    });
                }
            }

扫描完成后,更新数据源代码如下

            private void AddFiles(List<PersonFile> listFiles)
            {
                Application.Current.Dispatcher.BeginInvoke(new Action(() =>
                {
                    var index = Files.Count + 1;
                    foreach (var file in listFiles)
                    {
                        file.Index = index;
                        Files.Add(file);
                        index++;
                    }
                    HasFiles = Files.Count > 0;
                }), DispatcherPriority.ApplicationIdle);
            }

上面Files为ObservableCollection集合,PersonFile为文件对象,绑定时读取其文件路径。

发现这个问题是因为今天拿了一台扫描仪来测试,在安装了驱动后,多出两个扫描仪名称,一个是自身型号开头的,另外一个是WIA开头的,基实是一个机器,估计是驱动接口不同,之前本来就有一个虚拟扫描仪,现在一共三个,但只有使用这个机型型号开头的名称进行扫描时才会出现这个问题,其它两个不会。

问题补充:

经过多次测试,如果不是在扫描回调的函数调用AddFiles方法,UI就能正常同步更新,但是在扫描回调中调用,就出现这个问题,在Console中也看到了Files的数量变化,但是UI就没有更新,这时把鼠标随便移动到某个按钮上,UI就更新了。。。

duxer的主页 duxer | 初学一级 | 园豆:7
提问于:2019-11-05 22:03
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册