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);