Подтвердить что ты не робот

Dispatcher.BeginInvoke, пытаясь использовать lambda для получения набора строк из текстового блока, но получая ошибку преобразования

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

string yadda = listbox.SelectedItem.ToString();

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

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

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

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

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

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

4b9b3361

Ответ 1

Преобразуйте лямбда в Action:

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

Или постройте один из lambda:

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

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