WPF:当数据库更改时更新视图模型(并发问题)



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

  • MVVM
  • 实体框架4(带LINQ)
  • WCF服务,用于将数据库池化以获取数据(Oracle)
  • 我在视图模型类中进行WFC调用,并将数据放入ObservableCollections中
  • Db更改发生在另一个应用程序中

所以我的应用程序不会在DB上执行任何写入操作,它只读取数据并在UI上显示。

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

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

正如我所说,db每毫秒都会发生变化(来自其他来源的财务数据),

如何解决此问题?

谢谢。

我尝试了下面的代码,目前它似乎还可以正常工作(但我仍然对无限循环有一些疑问),让我知道你的想法:

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
}
}
}

最新更新