gpt4 book ai didi

c# - 数据绑定(bind)、多线程和单元测试

转载 作者:行者123 更新时间:2023-11-30 22:32:59 25 4
gpt4 key购买 nike

我有一个数据绑定(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com