c# - Dispatcher.BeginInvoke ,尝试使用 lambda 从文本 block 获取字符串集,但出现转换错误

标签 c# wpf delegates lambda

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

string yadda = listbox.SelectedItem.ToString();

我得到一个异常(exception):

The calling thread cannot access this object because a different thread owns it.

所以,我想做的是:

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

这也不起作用,因为我得到另一个异常:

Cannot convert lambda expression to type 'System.Delegate' because it is not a delegate type

最佳答案

将 lambda 转换为 Action:

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

或者从 lambda 构造一个:

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

您可能可以为采用ActionDispatcher 编写一个扩展方法,这样lambda 就会被隐式转换。

关于c# - Dispatcher.BeginInvoke ,尝试使用 lambda 从文本 block 获取字符串集,但出现转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6181849/

相关文章:

c# - 如何从 C# 中的 Action<T> 委托(delegate)调用非静态方法

c# - 奇怪的异常 MVC 4 项目

c# - 另一个sql查询语句

wpf - 从代码隐藏(xaml.cs)开始 Storyboard,而不是从 View 模型 MVVM

c# - PropertyChanged 在 ViewModelBase 中始终为 null

c# - 在 Typescript 中声明委托(delegate)类型

c# - 使用键生成一个新列表

c# - CloudBlob 子类之间有什么区别?

c# - WPF DataGridTextColumn 动态代码隐藏

c# - 将匿名 lambda 转换为强类型委托(delegate)会禁用编译器缓存吗?