我目前正在开发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
}
}
}