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。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

于 2012-10-17T12:18:23.323 に答える