Я пытаюсь обновить ObservableCollection
, то есть данные, связанные с пользовательским интерфейсом.Я знаю, что для этого мне нужно использовать Dispatcher
и BeginvInvoke()
, и чтобы сделать так, чтобы пользовательский интерфейс не зависал при этом, использование BackgroundWorker - хороший способ сделать это.В любом случае у меня все это есть, скомпилировано и запущено, но ничего не происходит.Мне нужно обновлять интерфейс каждые 2 минуты или около того, поэтому я также использую DispatcherTimer
. Это работает, потому что DispatcherTimer является частью Dispatcher, но замораживает интерфейс:
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();
}));
}
Но с пользовательским интерфейсом ничего не происходит.Что я пропускаю / не делаю правильно?