У меня есть простая модель просмотра, которая содержит модифицированный ObservableCollection
, который использует SynchronizationContext.Current.Send
для выполнения изменений коллекции в потоке пользовательского интерфейса. Эта коллекция заполнена длинным фоновым потоком.Задача заблокирована при перемещении/изменении размера окна
Это прекрасно работает во всех моих попытках сделать это, однако все они, кажется, заблокированы, перемещая окно или изменяя его размер.
Пробелы на этом участке от нажатия и удерживания кнопки мыши в строке заголовка окна.
Различные методы я попытался
Task.Factory.StartNew:
Task.Factory.StartNew(
() =>
{
double y = 0;
while (true)
{
Values.Add(new ValuePoint(DateTime.Now, Math.Sin(y)));
y += 0.1;
Thread.Sleep(20);
}
});
ThreadPool.QueueUserWorkItem:
ThreadPool.QueueUserWorkItem(GenerateNumbers);
private void GenerateNumbers(object obj)
{
double y = 0;
while (true)
{
Values.Add(new ValuePoint(DateTime.Now, Math.Sin(y)));
y += 0.1;
Thread.Sleep(20);
}
}
новый Тема:
_valueSimThread = new Thread(GenerateNumbers);
_valueSimThread.IsBackground = true;
_valueSimThread.Start();
ли я misunderst Что-то здесь? Мои ожидания в том, что работа, выполняемая в потоке, не должна зависеть от того, что я делаю в потоке пользовательского интерфейса. Это действие использования SynchronizationContext.Current.Send
, чтобы обновить коллекцию как источник моей проблемы?
Каков правильный «шаблон» для наличия ObservableCollection
, который обновляется фоновой задачей?