如何解决在类库中获取UI调度程序
| 我想设计一个类库,并计划使用多线程(即BackgroundWorker
)。如果我打算将线程上下文绑定到使用前端的库的GUI,则必须注意线程上下文,从该线程上下文进行字段的更新。正如我所读到的,将GUI调度程序的引用传递给库不是一个好主意。但是,如何获得将使用该库的应用程序的调度程序?这可能吗?
我尝试了Application.Current.Dispatcher
并添加了对WindowBase
的引用(因为我没有可能添加System.Windows
),但是仍然无法解析调度程序对象。
解决方法
Application类在
PresentationFramework.dll
中定义。您需要参考该内容,以便能够通过ѭ1to访问调度程序。
, 我遇到了同样的问题,即无法解析Application.Current.Dispatcher,最终将客户端gui调度程序传递到了仅包含Dispatcher ref(使用System.Windows.Threading引用WindowsBase +)的库中。
我更喜欢使用此选项,因为我的非GUI库必须携带对PresentationFramework.dll的引用(这似乎不自然)。
我猜是六分之一,六分之一...
, 如果确保(例如使用类的静态成员)对UIDispatcher
有了方便的引用,则可以执行以下操作:
public static void Run( Action a ) {
if ( !_uiDispatcher.CheckAccess() ) {
_uiDispatcher.BeginInvoke( a );
}
else {
a();
}
}
我看过的一个或两个MVVM框架做了这样的事情。
如果您不想将此“ 6”引用向下传递给库,则可以选择IoC容器。您也可以将它放在Common.dll中,以获取exe和类库都需要引用的类和接口。 exe可以设置正确的引用,并且类库可以调用Run()
方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。