У меня есть модель, которая связана с данными в элементах управления в представлении. Одно из связанных свойств (типа BindingList<T>
) обновляется из другого потока.
С помощью этого ответа я решил «Операция с несколькими потоками недопустима» следующим образом (.NET 4.0, TPL):
public class Model : INotifyPropertyChanged
{
private readonly TaskFactory _uiThreadTaskFactory =
new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext());
private readonly object _myPropertyLocker = new object();
private void Handler()
{
// In another thread
_uiThreadTaskFactory.StartNew(
() =>
{
lock (_myPropertyLocker)
{
MyProperty.Add(someStuff);
}
});
}
}
Это работало - пока я не попытался запустить свои юнит-тесты в ReSharper's runner (v5.1). Они скинули ошибку
Текущий SynchronizationContext не может использоваться в качестве TaskScheduler.
на линии
new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext());
Как я могу решить это настолько элегантно, насколько это возможно?