Dispatcher.BeginInvoke, пытаясь использовать lambda для получения набора строк из текстового блока, но получая ошибку преобразования
Я пытаюсь вызвать выбранный элемент списка из кнопки, а не метод listbox.selecteditemchanged
в wpf. Поэтому, когда я пытаюсь
string yadda = listbox.SelectedItem.ToString();
Я получаю исключение:
Вызывающий поток не может получить доступ к этому объекту, потому что ему принадлежит другой поток.
Итак, что я пытался сделать, это следующее:
Dispatcher.BeginInvoke(() =>
{
lbxSelectedItem = (lbxFileList.SelectedItem as TextBlock).Text;
});
Это не работает, потому что я получаю другое исключение:
Невозможно преобразовать лямбда-выражение для типа 'System.Delegate', потому что это не тип делегата
Ответы
Ответ 1
Преобразуйте лямбда в Action
:
Dispatcher.BeginInvoke((Action)(() => { /*DoStuff*/ }));
Или постройте один из lambda:
Dispatcher.BeginInvoke(new Action(() => { /*DoStuff*/ }));
Вероятно, вы можете написать метод расширения для Dispatcher
, который принимает Action
, таким образом лямбда будет неявно преобразована.