了解C#中的Dispatcher

3
我正在观看有关C# 5异步的视频,在示例中,他有一个异步方法和一个lambda回调函数。由于lambda回调函数在单独的线程上执行,试图在其中更改UI会导致异常。
为了缓解这个问题,他使用了 Dispatcher.RunAsync(...) 然而,我对此感到困惑。我创建了一个新的.NET 4.5项目,并尝试找到Dispatcher类,但我无法在任何地方找到它。Google告诉我它在System.Windows.Threading命名空间中,但我的计算机上没有这个dll,只有System.Windows。
我也不太明白它是如何工作的-查看MSDN文档,我实际上看不到Dispatcher(它假定处理所有线程)将如何在UI线程上执行操作- RunAsync方法不指定操作执行的线程。
我考虑过可能调度程序只是在用于创建调度程序的线程上运行事物,但由于上述问题无法在本地尝试,我无能为力。
有人能指导我解决方案吗?

1
不要将命名空间与程序集混淆。命名空间中的类型可以分布在多个程序集中,而命名空间名称不必与程序集名称相同。因此,即使存在一个名为System.Windows.Threading的命名空间,也没有System.Windows.Threading程序集。 - Martin Liversage
调度程序位于WindowsBase.DLL中。http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.aspx - Jace Rhea
你可以发布视频链接吗? - Jehof
视频:http://channel9.msdn.com/Events/Build/2012/3-011,我已经在Windowsbase.DLL中找到了它,谢谢。它被称为Dispatcher。然而它没有`RunAsync`方法。在视频的大约20分钟处,他使用了Dispatcher。 - NibblyPig
@SLC - 你们的UI框架是什么版本?WinForms中没有Dispatcher。 - H H
显示剩余4条评论
1个回答

3
你提到的 视频是关于使用Windows Runtime和.NET Framework 4.5开发Windows Store应用程序,他使用CoreDispatcher的 RunAsync方法,该方法是新的Windows API的一部分,位于命名空间Windows.UI.Core中。
在00:20:21停下来,看一下IntelliSense。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接