2012-02-04 14 views
2

可能性の重複:
thread with multiple parameters2つの引数を持つサブをスレッドしますか?

どのように2つの引数を持つサブスレッドのでしょうか?

私はそうが、そのエラーを考え出すように私のサブスレッドにしたい:ここ

Thread t = new Thread (subname); 
t.Start() 

はエラーです:

引数1: に「メソッドグループ」から変換することはできません " System.Threading.ParameterizedThreadStart '

のために最適なオーバーロードされたメソッドが一致しました' System.Threading.Thread.Thread(System.Threading.ParameterizedThreadStart) ' は、ここではいくつかの無効な引数

は私のサブがどのように見えるかでています

public string send2(string kom, string ddm) 
     { 

///code for a httpwebrequest (too long to post all of it) 


} 

君たちは、すべてのソリューションを持っていますか?

+0

サブパラメータはどのパラメータ値で呼び出されますか?これは意味をなさない。 – usr

答えて

5

あなたはラムダを使用することができます。少し遅れ

​​
+0

文字列komとddmがwebrequestで宣言されているか指定されている場合、それらをnullにすることはできますか? – user1017524

+0

私が私の答えで説明したように、スレッドを開始した直後に文字列が変更された場合のスレッド安全性の問題が懸念されます。 – Tudor

1

が、私は次のシナリオにあなたの注意をポイントしたいと思います:

... 
string kom = ... 
string ddm = ... 

Thread t = new Thread(() => send2(kom, ddm)); 

t.start(); 
// the strings get assigned different values 
kom = ... 
ddm = ... 

それはあなたのケースであるが、それではないこと起こることがあるので、それを知ることは良い考えです。

二つの文字列がtが起動する機会を得る前に、その方法send2は、スレッドがを作成したときに、彼らが持っていた値の文字列の新しい値を取得し、ません異なる値が割り当てられます場合。

この場合、それはラッパーオブジェクト内の文字列をコピーして、パラメータとしてスレッドに渡す方が良いでしょう:文字列がコピーして渡しましたので

Wrapper w = new Wrapper(); // contains two strings 
w.String1 = String.Copy(kom); 
w.String2 = String.Copy(ddm); 

Thread t = new Thread( 
    o => 
    { 
     Wrapper lw = (Wrapper)o; 
     send2(lw.String1, lw.String2)); 
    }); 

t.start(w); 
// the strings get assigned different values 
kom = ... 
ddm = ... 

は今、あなたは、本当に安全ですその後の変更はスレッドの実行に影響を与えません。