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

C# 无法将lambda表达式转换为类型';System.Delegate';,因为它不是委托类型,c#,lambda,dependency-properties,C#,Lambda,Dependency Properties,我为我的class1定义了一个依赖属性,它引发了一个事件。我不知道为什么它会给我这个错误“无法将lambda表达式转换为'System.Delegate'类型” 非常简单的Class1代码: public class Class1 { public delegate void myhandler(object sender, EventArgs e); public event myhandler test; public void connection()

我为我的class1定义了一个依赖属性,它引发了一个事件。我不知道为什么它会给我这个错误“无法将lambda表达式转换为'System.Delegate'类型”

非常简单的Class1代码:

    public class Class1
{
    public delegate void myhandler(object sender, EventArgs e);
    public event myhandler test;


    public void connection()
    {
        test(this, new EventArgs());
    }

}

总之,通常最好在单个属性之外解决跨线程需求。属性本身应该很简单,只需调用
GetValue()
SetValue()
。换句话说,属性getter或setter根本不需要调用
Dispatcher.Invoke()

也就是说,在代码示例中,您在属性getter中看到了所询问的错误,因为编译器没有足够的信息来推断正确的委托类型。
Dispatcher.Invoke()
方法只需将基类
Delegate
作为其参数。但是这个类没有固有的签名,编译器需要它来自动将lambda表达式转换为适当的匿名方法和匹配的委托实例

请注意,setter中没有类似的错误。这是因为您通过使用
操作
类型的构造函数显式提供了委托类型。如果您将getter代码更改为更像setter,那么它将起作用

有几种不同的语法可供选择,但基于setter,这似乎最接近您喜欢的语法:

get
{
    return Dispatcher.Invoke(
        new Func<object>(() => GetValue(class1Property))) as Class1;
}
get
{
返回Dispatcher.Invoke(
新的Func(()=>GetValue(classproperty))作为Class1;
}


请参阅相关讨论,例如(如果您在Stack Overflow中搜索看到的错误消息,您会发现一些相关问题)。

谢谢,请检查新的开场问题。
get
{
    return Dispatcher.Invoke(
        new Func<object>(() => GetValue(class1Property))) as Class1;
}