初めて投稿します。よろしくお願いします。
さっそくですが
Thread t1 = new Thread(new ThreadStart(func1);
t1.Start();
というよに、スレッドでfunc1を実行してます
でも、func1には、引数stringが2つあります。
この2つの引数はいつ渡せばよいのでしょうか。
またVisualStudio2005Express使ってます。
そもそも,そのコードはコンパイル可能ですか?
ThreadStartはvoid func1(string s1, string s2)を受け入れないと思いますが。
引数が欲しいのであれば,
・func1と引数をクラス化してしまう
・非同期デリゲートを利用する
あたりになると思います。
コンパイルとおりません。スレッドでfunc1を実行してますではなくて
func1を実行したいです。の誤りです。
>・func1と引数をクラス化してしまう
>・非同期デリゲートを利用する
ThreadStartや、Start()にパラメータを簡単に渡す方法はやはりないのですね。
すいません、func1と引数をクラス化とは具体的にはどのようにクラス化すれば
よいでしょうか。
> ThreadStartや、Start()にパラメータを簡単に渡す方法はやはりないのですね。
ThreadPool クラスを使えば出来ます。
ThreadPool.QueueUserWorkItem なら、第2引数でスレッドに任意のパラメータを渡せま
す。
#これでできるのに、何故 Thread クラスでは出来なかったのか、理解に苦しみます。
また、.NET Framework 2.0 以降であれば、ThreadStart デリゲートの代わりに
ParameterizedThreadStart デリゲートを使えば、パラメータを渡すことが出来ます。
あ、でも、俺の言った方法でも1つしか渡せませんので、複数渡したい場合は、全ての
引数を単一のクラスにパックして渡しましょう。
あと、デリゲートを使った非同期メソッド実行ならば、任意個数の引数を渡せるはず。
2.0です。
ParameterizedThreadStartを使って以下のように引数を渡すことができました!
Thread t1 = new Thread(new ParameterizedThreadStart(func1));
Param p = new Param();
p.str1 = aa;
p.str2 = bb;
t1.Start(p);
YuOさん、シャノンさんありがとうございました。