我們在WPF中有一個應用程序,它通過ObservableCollection顯示數據。 5分鐘後,我想刷新數據。用WPF中的定時器刷新UI(帶BackgroundWorker?)
我想我可以使用System.Timers.Timer
對象的Elapsed
事件,然後調用BackgroundWorker
調用啓動工作的方法。該方法在ViewModel類上。
但似乎有線程的問題。
所以我試着用調度器,但同樣的事情再次。
這是我(簡體和未優化)代碼:
/// <summary>
/// Initializes a new instance of the <see cref="ApplicationController"/> class.
/// </summary>
public ApplicationController()
{
CreateDefaultTabs();
Timer timer = new Timer(20000); //20 secs for testing purpose.
timer.AutoReset = true;
timer.Enabled = true;
timer.Elapsed += new ElapsedEventHandler(OnTimeBeforeRefreshElapsed);
timer.Start();
}
private void OnTimeBeforeRefreshElapsed(object sender, ElapsedEventArgs e)
{
Dispatcher.CurrentDispatcher.Invoke(new Action(() => { RefreshData(); }));
Dispatcher.CurrentDispatcher.Invoke(new Action(() => { UpdateLayout(); }));
}
private void RefreshData()
{
foreach (object tab in _tabItems)
{
if (tab is TitleDetailsView)
{
TitleDetailsViewModel vm = ((TitleDetailsView)tab).DataContext as TitleDetailsViewModel;
vm.Refresh();
}
}
}
private void UpdateLayout()
{
foreach (object tab in _tabItems)
{
if (tab is TitleDetailsView)
{
TitleDetailsViewModel vm = ((TitleDetailsView)tab).DataContext as TitleDetailsViewModel;
vm.HandleGetTitleBySymbolResponse();
}
}
}
,我應該如何進行的任何建議嗎?
線程有問題嗎?什麼問題呢? – 2010-10-20 19:31:45