Vraag Dispatcher.BeginInvoke, in een poging om lambda te gebruiken om een ​​string van tekstblok te krijgen, maar een conversiefout te krijgen


Ik probeer een geselecteerd listbox-item te bellen vanaf een knop, niet het listbox.selecteditemchanged methode in wpf. Dus als ik het probeer

string yadda = listbox.SelectedItem.ToString();

ik krijg een uitzondering:

De aanroepende thread heeft geen toegang tot dit object omdat het een andere thread is.

Dus wat ik probeerde te doen, is het volgende:

Dispatcher.BeginInvoke(() =>
                    {
                        lbxSelectedItem =  (lbxFileList.SelectedItem as TextBlock).Text;
                    });

Dat werkt ook niet omdat ik een andere uitzondering krijg:

Kan lambda-expressie niet converteren naar het type 'System.Delegate' omdat het geen gedelegeerd type is


12
2018-05-31 00:30


oorsprong


antwoorden:


Zet de lambda om in een Action:

Dispatcher.BeginInvoke((Action)(() => { /*DoStuff*/ }));

Of maak er een uit de lambda:

Dispatcher.BeginInvoke(new Action(() => { /*DoStuff*/ }));

U kunt waarschijnlijk een uitbreidingsmethode schrijven voor de Dispatcher dat kost een Action, op die manier zou de lambda impliciet worden omgezet.


24
2018-05-31 00:50