我有一个将数据绑定(bind)到 View 中的控件的模型。绑定(bind)属性之一(类型 BindingList<T>
)从另一个线程更新。
在 this answer 的帮助下,我解决了“跨线程操作无效”问题,如下(.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 的测试运行程序 (v5.1) 中运行单元测试。他们抛出了错误
The current SynchronizationContext may not be used as a TaskScheduler.
上线
new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext());
我怎样才能尽可能优雅地解决这个问题?
最佳答案
您需要提供一个 SynchronizationContext。 引用: The current SynchronizationContext may not be used as a TaskScheduler .
[SetUp]
public void TestSetUp()
{
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
}
关于c# - 数据绑定(bind)、多线程和单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8513548/