0

我目前正在开发 WPF 应用程序,其架构如下:

  • MVVM
  • 实体框架 4(带有 LINQ)。
  • 汇集数据库以获取数据的 WCF 服务 (Oracle)。
  • 我在我的视图模型类中调用 WFC 并将我的数据放在 ObsevableCollections 中。
  • Db Changes 发生在另一个应用程序中。

所以我的应用程序不会对数据库执行任何写入操作(Zéro),它只会读取数据并将其显示在 UI 上。

如何使我的应用程序能够快速响应数据库更改,我阅读了以下解决方案,但我很困惑,不知道该使用什么:

  • 使用 DispatcherTimer 每 n 秒池化一次数据库(似乎工作量太大,导致数据每毫秒更改一次)
  • SqlDependency,在整个互联网上搜索,但没有找到使用 EF 的正确实现。

正如我所说,db 每毫秒都会更改一次(来自其他来源的财务数据),

如何解决这个问题?

谢谢你。

4

1 回答 1

0

我尝试了下面的代码,目前它似乎工作正常(但我仍然对那个无限循环有一些疑问),让我知道你在做什么:

public class MyViewModel
    {


          BackgroundWorker _bgWorker ;
          //some props
          //some funcs


protected internal MyViewModel(Session session)
        {
            Session = session;
            RefreshData();
        }        

protected void RefreshData()
        {
            try
            {
                _bgWorker = new BackgroundWorker
                {
                    WorkerReportsProgress = true,
                    WorkerSupportsCancellation = true

                };
                _bgWorker.DoWork += bgDoWork;

                if (!_bgWorker.IsBusy)
                {
                    _bgWorker.RunWorkerAsync();
                }
            }
            catch (Exception)
            {
                _bgWorker.CancelAsync();
            }
        }

        private void bgDoWork(object sender, DoWorkEventArgs e)
        {
            var worker = (BackgroundWorker)sender;
            while (!worker.CancellationPending)
            {
                //Thread.Sleep(1000); should i keep this or not ?
                Proxy(); // WCF calls
            }
        }
        }
于 2016-05-27T14:52:57.297 回答