質問

私は、.NETでのThreadPoolに少し新しいです。私は私のコールバックメソッドに一つのオブジェクトを送ることができる場合、私は、思っていた、どのように私は、そのメソッドを呼び出すために、クラスのメンバ変数にアクセスすることができるのですか? (コールバックでcustomClass()を参照)

そして、どのように私はcustomClassからデータをロードするのでしょうか?私はcustomClassは異なるコールバックメソッドに渡すのですか?このアプローチは大丈夫でしょうか?

あなたが見ることができるように

それは経験不足のビットなので、道に沿って任意のヒントは本当にいただければ幸いです。

は、ありがとう KAVE

class Program
           {
                static void Main(string[] args)
                {
                    CustomClass customClass = new CustomClass();

                ThreadPool.QueueUserWorkItem(CallBack, "Hello"); 


                Console.Read();
            }

            private static void CallBack(object state)
            {
                customClass.SaveData(state.ToString());
            }
        }
役に立ちましたか?

解決

class Program
{
  static void Main(string[] args)
  {
    CustomClass customClass = new CustomClass();
    ThreadPool.QueueUserWorkItem(x => CallBack(customClass, "Hello")); 
    Console.Read();
  }

  private static void CallBack(CustomClass custom, string text)
  {
    customClass.SaveData(text);
  }
}

他のヒント

これを行う最も簡単な方法は、すべてのキャプチャするために閉鎖を使用することですあなたがしたい変数(すなわち、匿名メソッドやラムダ式を使用します)。あなたは、ループを使用している場合は撮影しています正確に何に注意する必要があるが、それは、オブジェクトを通過すると、右の種類などに戻ってそれをキャストするよりも手軽です。

何を言われてきたことに加え:CustomClassがあなたのコントロール下にあり、非同期的に呼び出すSaveDataは、一般的な使用例である場合、あなたはSaveDataAsyncの方法を提供することを考えることができます:

class CustomClass {

    public void SaveDataAsync(string path) {
        ThreadPool.QueueUserWorkItem(state => this.SaveData(path));
    }

    public void SaveData(string path) {
        ...
    }
}

イベントベースの非同期パターンを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top