2011-07-15 6 views
2

はメンバ関数を渡すことによって作成される:ここC#スレッドからオブジェクトへのどのようなメンバ関数がそのスレッドのパラメータであったのですか? C#のスレッドで

class SomeClass { 
    public void ThreadFunction() {Thread.Sleep(Infinite); } 
}; 


SomeClass myObject = new SomeClass(); 
Thread thread = new Thread(myObject.ThreadFunction); 
thread.Start(); 

ThreadFunction()は静的ではないので、私は、オブジェクト参照がThreadコンストラクタに渡される推測します。

内部コードThreadFunction()はどうすればmyObjectになるのですか?それにthisリファレンスを使用していますか?

+0

うん、これは完全にOKです。私。 ThreadFunctionの任意のフィールド、プロパティ、またはメソッドを使用できます。 –

答えて

4

class SomeClass { 
    public void ThreadFunction(Object obj) 
    { 
    SomeClass myObject = (SomeClass)obj; 
    Thread.Sleep(Infinite); 
    } 
}; 


SomeClass myObject = new SomeClass(); 
Thread thread = new Thread(new ParameterizedThreadStart(myObject.ThreadFunction)); 
thread.Start(myObject) 
+0

これはあまりにも過剰なようです。 ThreadFunctionを別のオブジェクトに呼び出すことができる場合に便利です。しかし、この状況は私にとって非常に奇妙なようです。 –

4

正確な例では、単にthisにアクセスしてください。一般的なケースでは

、あなたも

class SomeClass { 
    public void ThreadFunction(object param) 
    { 
    var justAnExample = (string)param; 
    } 
}; 


SomeClass myObject = new SomeClass(); 
Thread thread = new Thread(myObject.ThreadFunction); 
thread.Start("parameter"); 

これは、あなたがスレッド関数に(ここでは、string)任意の型のパラメータを渡すことができますような何かを行うことができます。複数のものが必要な場合は、Tupleまたはobject[]または他の値のコンテナを常に渡すことができます。

このようにすれば、ThreadFunctionstaticthisを使用するオプションが失われます)を作成することもできます。このよう

関連する問題