WinRT CoreDispatcher 具有 RunAsync 方法,该方法实际上不采用状态变量。
翻译:在最常见的情况下,通过发布到 Dispatcher 发生的每个通知最终都会由于关闭而在内部分配。忽略了一个简单而重要的设计,这非常令人担忧。
例如:实现 INotifyPropertyChanged 的一个简单的常见示例需要一个最终结果如下的方法:
protected virtual void NotifyPropertyChanged(
[CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null)
{
// Check access first, and then at some point pass it along.
Dispatcher.RunAsync(() =>
handler(this, new PropertyChangedEventArgs(propertyName)));
}
}
现在,每次调用一个简单的 prop changed 通知时,编译器都会在后台分配一个新的类,这对于很多通知来说是可怕的。这使得回退到 SynchronizationContext.Post,这是一个更有效的选择,当有很多通知时,考虑到它有一个状态变量,处理程序和 propertyName 可以一起传递。
任何关于如何在这种情况下使用 Dispatcher 的建议或想法将不胜感激。