ビューのコントロールにバインドされたデータであるモデルがあります。結合されたプロパティ(タイプBindingList<T>
)の1つが別のスレッドから更新されます。 (TPLは、.NET 4.0)を以下のようにthis answerからの助けを借りてデータバインディング、マルチスレッド、ユニットテスト
は、私が「有効なクロススレッド操作ではない」問題をを解く:
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)のテスト彼らはエラーを投げた
現在のSynchronizationContextはTaskSchedulerとして使用できません。
ライン上
new TaskFactory(TaskScheduler.FromCurrentSynchronizationContext());
どのように私はエレガントに可能な限りこれを解決することができますか?
NUnitを使用していますか? http://stackoverflow.com/questions/8245926/nunit-tests-the-current-synchronizationcontext-may-not-be-used-as-a-taskschedul –
@LukeHutton - はい、NUnitです。私はあなたがその問題を見つけたと思う。それを回答として投稿したいかもしれません。 :)ありがとう! – TrueWill