调度员'不包含' InvokeAsync'的定义没有扩展方法' InvokeAsync'

时间:2017-09-02 23:53:41

标签: c# .net wpf mvvm dispatcher

我有错误,这是我的代码。

private void ComboBoxSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            _comboBox.Dispatcher.InvokeAsync(() => ContentChanged?.Invoke(sender, EventArgs.Empty));
        }

它的说法Dispatcher' does not contain a definition for 'InvokeAsync' and no extension method 'InvokeAsync' accepting a first argument of type 'Dispatcher' could be found (are you missing a using directive or an assembly reference? wpf我失去了,我需要帮助。感谢。

1 个答案:

答案 0 :(得分:4)

Dispatcher.InvokeAsync绝对是.NET 4.5 的现有方法。如果您尝试编译.NET 4.0或更早版本,您将看到该错误。

它与调用Dispatcher.BeginInvoke的效果相同。差异是BeginInvoke接受委托(需要来自lambda的演员),而InvokeAsync则不接受,因为它接受Action。这样做是为了重构API,但是仍然没有使用BeginInvoke来破坏代码。有关详细信息,请参阅this thread

在.NET 4.5之前

_comboBox.Dispatcher.BeginInvoke((Action)(() => {
    ContentChanged?.Invoke(sender, EventArgs.Empty);
}));

自.NET 4.5

_comboBox.Dispatcher.InvokeAsync(() => {
    ContentChanged?.Invoke(sender, EventArgs.Empty);
});