我整个上午都被困在这上面,尽管看起来应该很容易(想知道我是否遗漏了一些基本的东西)。我在类中有以下代码 -
public class myClass
{
private Dispatcher m_Dispatcher;
private void myMethod() { ... }
private void invokeTheMethod(object sender, PropertyChangedEventArgs e)
{
m_Dispatcher.Invoke(myMethod); //XYZ
}
}
调度程序附加到运行myClass实例的线程。从另一个线程调用invokeTheMethod方法,我想在m_Dispatcher的线程上运行myMethod。但是,如果我尝试运行此代码,我会在XYZ处获得一个异常,说“对象引用不是对象的实例”。这是因为我没有以委托的形式声明myMethod吗? - 我尝试了将myMethod声明为委托的不同方法,但我无法将其中的任何一个编译。任何建议都非常感谢。
谢谢, 克里斯
答案 0 :(得分:0)
你得到的错误
对象引用不是对象的实例(NullReferenceException)
指的是字段m_Dispatcher
。它是null。这就是为什么你不能在它上面调用Invoke
方法。
即使有一个Dispatcher
“的实例附加到该线程”,myClass
也无法获取该实例。
您可以做的是在创建Dispatcher
的实例时向myClass
提供myClass
的实例。像这样:
public class myClass
{
// Here is the 'injection' of the instance in the constructor of this class
public myClass(Dispatcher dispatcher) {
m_Dispatcher = dispatcher;
}
private Dispatcher m_Dispatcher;
private void myMethod() { ... }
private void invokeTheMethod(object sender, PropertyChangedEventArgs e)
{
m_Dispatcher.Invoke(myMethod); //XYZ
}
}
作为旁注,您应该阅读一些有关编码约定的内容,因为大多数C#开发社区认为外壳被认为是错误的。这是一个好的开始:http://msdn.microsoft.com/en-us/library/vstudio/w2a9a9s3.aspx