Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从WPF ui线程访问委托时出错_C# - Fatal编程技术网

C# 从WPF ui线程访问委托时出错

C# 从WPF ui线程访问委托时出错,c#,C#,我很抱歉,但我看不出我做错了什么/不理解?我已宣布一名代表,如: namespace ABC { public delegate void GenerateView(); public class X { public X() { GenerateView handler = GenerateViewMethod; } public void GenerateViewMethod() { ....

我很抱歉,但我看不出我做错了什么/不理解?我已宣布一名代表,如:

namespace ABC
{
   public delegate void GenerateView();

   public class X
   {
      public X()
      {
         GenerateView handler = GenerateViewMethod;
      }

      public void GenerateViewMethod()
      { .... }

    }
 }
然后在ui中,我将其称为:

private readonly X MyXClass;
Dispatcher.BeginInvoke(MyXClass.???) //handler isn't an option?
唯一显示的方法是GenerateViewMethod,当然这不是我的委托

很明显,我没有正确地公开委托,但我没有单击缺少的内容

谢谢你的帮助


更新进一步资料


我有一个WPF Ui,当用户单击唯一的按钮时,我只是想在不同的线程中进行一些处理,而不是锁定Ui。对我来说,这是一个非常简单的小测试。

当前代码不起作用的原因是
handler
只是构造函数中的一个局部变量

虽然您可以添加公共属性,但如果只是外部代码能够获取调用
GenerateViewMethod
的委托,那么您不需要任何额外的东西-其他代码可以使用方法组转换。例如:

Action action = MyXClass.GenerateViewMethod;
Dispatcher.BeginInvoke(action);
或:

或者,如果您正在使用,您可以简单地使用:

Dispatcher.BeginInvoke(MyXClass.GenerateViewMethod);

DispatcherExtensions
类在这里提供帮助的原因是
Dispatcher
本身声明的方法只接受
Delegate
参数,因此需要告诉编译器要生成哪种委托。扩展采用特定的
操作
委托,因此编译器只是将方法组转换为该委托。

是的,因为
处理程序
是构造函数中的局部变量。你没有财产。。。如果处理任何其他类型,都会遇到同样的问题。对……所以我创建了一个委托属性来公开它?当然可以。我不确定这是否是一个好的设计,因为我们不知道你想要实现什么。嗯,不清楚你为什么需要一处房产。。。为什么不干脆
Dispatcher.BeginInvoke((操作)MyXClass.GenerateViewMethod)我知道你有无数的分数,但你确实回答了,如果你想让它正式,我会给它打分。像往常一样,这是一个非常有力和有教育意义的答案。非常感谢。
Dispatcher.BeginInvoke(MyXClass.GenerateViewMethod);