Dispatcher.BeginInvoke, пытается использовать лямбду для получения набора строк из текстового блока, но получает ошибку преобразования - PullRequest
13 голосов
/ 31 мая 2011

Я пытаюсь вызвать выбранный элемент списка из кнопки, а не из метода listbox.selecteditemchanged в wpf. Поэтому, когда я пытаюсь

string yadda = listbox.SelectedItem.ToString();

я получаю исключение:

Вызывающий поток не может получить доступ к этому объекту, поскольку он принадлежит другому потоку.

Итак, я пытался сделать следующее:

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

Это тоже не работает, потому что я получаю еще одно исключение:

Невозможно преобразовать лямбда-выражение в тип 'System.Delegate', поскольку оно не является типом делегата

1 Ответ

25 голосов
/ 31 мая 2011

Преобразование лямбды в Action:

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

Или создание из лямбды:

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

Возможно, вы можете написать метод расширения для Dispatcher, который принимает Action, таким образом лямбда будет неявно преобразована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...