0

我整个早上都被困在这个问题上,尽管它看起来应该很容易(想知道我是否遗漏了一些基本的东西)。我在课堂上有以下代码-

 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 声明为委托,但我无法编译它们中的任何一个。任何建议都非常感谢。

谢谢,克里斯

4

1 回答 1

0

你得到的错误

对象引用不是对象的实例 (NullReferenceException)

指领域m_Dispatcher。它是空的。这就是为什么你不能调用Invoke它的方法。

即使存在Dispatcher“附加到线程”的实例,也无法myClass获取该实例。

您可以做的是在创建 的实例时提供Dispatcherto的实例。像这样的东西:myClassmyClass

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

于 2012-10-17T12:18:23.323 回答