[Test]
public void A()
{
var d = Dispatcher.CurrentDispatcher;
Action action =() => Console.WriteLine("Dispatcher invoked me!");
var worker = new BackgroundWorker();
worker.DoWork += SomeWork;
//worker.RunWorkerAsync((Action) delegate { Console.WriteLine("This works!"); });
worker.RunWorkerAsync((Action) delegate { d.Invoke(action); });
System.Threading.Thread.Sleep(2500);
}
private void SomeWork(object sender, DoWorkEventArgs e)
{
(e.Argument as Action)();
}
该代码块不会引发异常。同时,Dispatcher.Invoke什么都不做。我发现那很奇怪。为什么Dispatcher.Invoke在此示例中不执行委托参数?
我提取了一个辅助方法到基础ViewModel。工作线程使用此方法DoOnUIThread()来避免线程相关性问题。 但是在我的单元测试中,我发现试图测试视图模型对象导致失败,原因是上述问题。
我可以将这整个行为移出一个可插入的依赖项,我可以在我的测试中替代。例如ViewModelBase依赖于UIThreadExecutor.Execute(Action),我使用一个假的只是在我的测试中调用动作。然而,我很好奇,为什么分派器行为的方式...
是的,我错过了在代码片段...更新。thx – Gishu 2010-09-29 19:39:00
啊好凉快。是的,我认为汉斯当时有正确的想法。 – SwDevMan81 2010-09-29 19:40:45
在WPF和AFAIK中没有Application.DoEvents成员,因此不推荐这个想法。 – Gishu 2010-09-29 19:54:34