スレッドで実行するメソッドの引数を指定するには? – プログラミング – Home

スレッドで実行するメソッドの引数を指定...
 
通知
すべてクリア

[解決済] スレッドで実行するメソッドの引数を指定するには?


みゅー
 みゅー
(@みゅー)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

初めて投稿します。よろしくお願いします。
さっそくですが

Thread t1 = new Thread(new ThreadStart(func1);
t1.Start();
というよに、スレッドでfunc1を実行してます

でも、func1には、引数stringが2つあります。
この2つの引数はいつ渡せばよいのでしょうか。

またVisualStudio2005Express使ってます。


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 21年前
投稿: 320
 

そもそも,そのコードはコンパイル可能ですか?
ThreadStartはvoid func1(string s1, string s2)を受け入れないと思いますが。

引数が欲しいのであれば,
・func1と引数をクラス化してしまう
・非同期デリゲートを利用する
あたりになると思います。


返信引用
みゅー
 みゅー
(@みゅー)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

コンパイルとおりません。スレッドでfunc1を実行してますではなくて
func1を実行したいです。の誤りです。

>・func1と引数をクラス化してしまう
>・非同期デリゲートを利用する
ThreadStartや、Start()にパラメータを簡単に渡す方法はやはりないのですね。

すいません、func1と引数をクラス化とは具体的にはどのようにクラス化すれば
よいでしょうか。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> ThreadStartや、Start()にパラメータを簡単に渡す方法はやはりないのですね。

ThreadPool クラスを使えば出来ます。
ThreadPool.QueueUserWorkItem なら、第2引数でスレッドに任意のパラメータを渡せま
す。
#これでできるのに、何故 Thread クラスでは出来なかったのか、理解に苦しみます。

また、.NET Framework 2.0 以降であれば、ThreadStart デリゲートの代わりに
ParameterizedThreadStart デリゲートを使えば、パラメータを渡すことが出来ます。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

あ、でも、俺の言った方法でも1つしか渡せませんので、複数渡したい場合は、全ての
引数を単一のクラスにパックして渡しましょう。

あと、デリゲートを使った非同期メソッド実行ならば、任意個数の引数を渡せるはず。


返信引用
みゅー
 みゅー
(@みゅー)
ゲスト
結合: 18年前
投稿: 8
Topic starter  

2.0です。
ParameterizedThreadStartを使って以下のように引数を渡すことができました!

Thread t1 = new Thread(new ParameterizedThreadStart(func1));
Param p = new Param();
p.str1 = aa;
p.str2 = bb;
t1.Start(p);

YuOさん、シャノンさんありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました