我编写了一个WPF WizardFramework,它使用一些在后台执行一些操作BackgroundWorker.在处理时,我必须更新ObservableCollection绑定到我的UI的内容.
对于这种情况,我写了一个ThreadableObservableCollection,它提供线程安全的方法Insert,Remove和RemoveAt.虽然我使用的是.NET 4.5,但如果BindingOperations.EnableCollectionSynchronization没有其他许多无效的访问异常,我就无法工作.我Collection看起来像:
public class ThreadableObservableCollection<T> : ObservableCollection<T>
{
private readonly Dispatcher _dispatcher;
public ThreadableObservableCollection()
{
_dispatcher = Dispatcher.CurrentDispatcher;
}
public void ThreadsafeInsert(int pos, T item, Action callback)
{
if (_dispatcher.CheckAccess())
{
Insert(pos, item);
callback();
}
else
{
_dispatcher.Invoke(() =>
{
Insert(pos, item);
callback();
});
}
}
[..]
}
Run Code Online (Sandbox Code Playgroud)
这是按预期工作,而我在我的应用程序中使用向导.现在我正在使用NUnit为应用程序编写一些集成测试.
有一个监听器等待WizardViewModel完成它的工作并寻找一些在Steps-Collection中注入的页面.完成asyncrone工作后,我可以使用Validate来检查viewmodel状态.
不幸的是我正在使用a ManualResetEvent来等待向导关闭.这看起来如下:
public class WizardValidator : IValidator, IDisposable
{
private WizardViewModel …Run Code Online (Sandbox Code Playgroud)