Dispatcher.BeginInvoke,尝试使用lambda从textblock获取字符串集,但是获得转换错误

dar*_*ard 13 c# wpf lambda delegates

我试图从按钮调用选定的列表框项,而不是listbox.selecteditemchangedwpf中的方法.所以,当我尝试

string yadda = listbox.SelectedItem.ToString();
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

调用线程无法访问此对象,因为另一个线程拥有它.

所以,我想要做的是以下内容:

Dispatcher.BeginInvoke(() =>
                    {
                        lbxSelectedItem =  (lbxFileList.SelectedItem as TextBlock).Text;
                    });
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为我得到另一个例外:

无法将lambda表达式转换为类型'System.Delegate',因为它不是委托类型

H.B*_*.B. 26

将lambda转换为Action:

Dispatcher.BeginInvoke((Action)(() => { /*DoStuff*/ }));
Run Code Online (Sandbox Code Playgroud)

或者从lambda构造一个:

Dispatcher.BeginInvoke(new Action(() => { /*DoStuff*/ }));
Run Code Online (Sandbox Code Playgroud)

你也许可以写为扩展方法Dispatcher接受一个Action,这样的拉姆达会被隐式转换.