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

时间:2011-05-31 00:30:32

标签: c# wpf delegates lambda

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

string yadda = listbox.SelectedItem.ToString();

我得到一个例外:

  

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

所以,我试图做的是以下几点:

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

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

  

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

1 个答案:

答案 0 :(得分:25)

将lambda转换为Action

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

或者从lambda构建一个:

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

您可能可以为Dispatcher编写一个Action的扩展方法,这样就可以隐式转换lambda。