2017-09-02 5 views
0

Bitte ich habe einen Fehler und das ist mein Code.Dispatcher 'enthält keine Definition für' InvokeAsync 'und keine Erweiterungsmethode' InvokeAsync '

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

seinen Spruch 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 Ich bin verloren bitte, ich Hilfe auf diese. Vielen Dank.

+0

schreiben es als '' _comboBox.Dispatcher.InvokeAsync ((Action) (() => ContentChanged? .Invoke (Absender, EventArgs.Empty))); '' –

+0

@RandRandom Gleiche Frage Sir ... –

Antwort

3

Dispatcher.InvokeAsync ist definitiv eine bestehende Methode ab .NET 4.5. Sie sehen diesen Fehler, wenn Sie versuchen, für .NET 4.0 oder früher zu kompilieren.

Es hat den gleichen Effekt, als ob Sie Dispatcher.BeginInvoke aufgerufen hätten. Der Unterschied ist BeginInvoke akzeptiert einen Delegaten (erfordert eine Besetzung von einem Lambda), während InvokeAsync nicht, weil es eine Action akzeptiert. Dies wurde getan, um die API zu refaktorieren, aber auf eine Art und Weise, die den Code unter Verwendung von BeginInvoke nicht brach. Weitere Details finden Sie unter this thread.

Vor .NET 4.5:

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

Seit .NET 4.5:

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

Dank @KobyDuck, es hat gut funktioniert .. –

Verwandte Themen