【发布时间】:2014-06-17 13:00:14
【问题描述】:
Mvvm Light Toolkit 包括DispatcherHelper,这是一个非常有用的工具。它允许以非常简单的方式从后台线程同步主UI Thread。比如DispatcherHelper.CheckBeginInvokeOnUI():
//In any moment before...
DispatcherHelper.Initialize();
ThreadPool.QueueUserWorkItem(
o =>
{
//Do something
DispatcherHelper.CheckBeginInvokeOnUI(()=>StatusTextBlock.Text = "Done");
}
);
在使用DispatcherHelper 之前,我通常使用MainThread 的SynchronizationContext 来提交从非主线程到视图的任何更改。
我的问题是:为什么在使用类之前必须执行DispatcherHelper.Initialize 方法?第一次可以在静态构造函数上调用吗?例如:
public class DispatcherHelper
{
private static void Initialize()
{
//...
}
static DispatcherHelper(){
Initialize();
}
//...
}
我认为这种方式是不需要的
【问题讨论】:
-
所以,我相信这是因为
Dispatcher通常在应用程序初始化之后才可用。DispatcherHelper无法从库本身知道何时发生这种情况,因此它依赖于用户告知它。使用您的方法,理论上用户可以在访问Dispatcher之前尝试使用DispatcherHelper,因此可能会引发异常或只是不调用请求的方法。tl;dr这样可以保护开发人员不会造成DispatcherHelper无法处理的情况。
标签: c# wpf silverlight windows-phone mvvm-light