ThreadPoolのとメンバー変数をどのように扱いますか?
-
11-09-2019 - |
質問
私は、.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) {
...
}
}
イベントベースの非同期パターンを参照してください。
所属していません StackOverflow