【发布时间】:2023-03-03 20:48:01
【问题描述】:
我正在尝试更新绑定到 UI 的数据ObservableCollection。我知道要做到这一点,我需要使用Dispatcher 和BeginvInvoke(),并确保在我这样做时 UI 不会冻结,使用 BackgroundWorker 是一个很好的方法。无论如何,我已经编译并运行了所有这些,但没有任何反应。我需要每 2 分钟左右更新一次 UI,所以我也在使用 DispatcherTimer
这可行,因为 DispatcherTimer 是 Dispatcher 的一部分,但会冻结 UI:
DispatcherTimer dispTimer = new DispatcherTimer();
dispTimer.Tick += dispTimer_Tick;
dispTimer.Interval = new TimeSpan(0, 0, 45);
dispTimer.Start();
private void dispTimer_Tick(object sender, EventArgs e)
{
PartialEmployees.Clear();
}
所以,我使用 BackgroundWorker 拼凑了这个:
DispatcherTimer dispTimer = new DispatcherTimer();
dispTimer.Tick += dispTimer_Tick;
dispTimer.Interval = new TimeSpan(0, 0, 45);
dispTimer.Start();
private void dispTimer_Tick(object sender, EventArgs e)
{
BackgroundWorker _worker = new BackgroundWorker();
_worker.DoWork += DoWork;
_worker.RunWorkerAsync();
}
private void DoWork(object sender, DoWorkEventArgs e)
{
Dispatcher.CurrentDispatcher.BeginInvoke( new Action(()=>
{
PartialEmployees.Clear();
}));
}
但用户界面没有任何反应。我错过了什么/做得不对?
【问题讨论】:
标签: c# mvvm backgroundworker dispatcher wpf-4.0