C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[9]: スレッド生成


(過去ログ 17 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■6938 / inTopicNo.1)  スレッド生成
  
□投稿者/ 太郎(初心者) (1回)-(2007/08/27(Mon) 17:44:00)

分類:[C#] 

どなたか教えてください!

スレッドを作成し、作成したスレッドで行う処理のメソッドを以下のように記述しました。

Thread AThred = new Thread(new ThreadStart(method));
AThread.Start();

このようにした場合、methodのオーバーロードはありませんと言われてしまいました。

メソッド(method)は、public void method(long aaa, long bbb)とパラメータを渡しています。

いろいろなサンプルを見ると、パラメータがないサンプルが多いのですが、
パラメータがあると作成したスレッドでは処理ができないのでしょうか?

どなたか、よろしくお願いいたします。



引用返信 編集キー/
■6941 / inTopicNo.2)  Re[1]: スレッド生成
□投稿者/ シャノン (204回)-(2007/08/27(Mon) 17:55:11)
No6938 (太郎(初心者) さん) に返信
> いろいろなサンプルを見ると、パラメータがないサンプルが多いのですが、
> パラメータがあると作成したスレッドでは処理ができないのでしょうか?

作成したスレッドで処理ができないというより、コンパイルさえできないわけですから、スレッドが作成できませんよね。
ThreadStartデリゲートのコンストラクタ引数には、ThreadStartデリゲートと同じシグネチャ(引数及び戻り値の型が同じ)メソッドを渡さなければなりません。
具体的にどういうメソッドを使うべきかは、MSDNをご覧ください。
引用返信 編集キー/
■6944 / inTopicNo.3)  Re[2]: スレッド生成
□投稿者/ 太郎(初心者) (3回)-(2007/08/27(Mon) 19:09:48)
以下のように変更しましたが、

Thread AThred = new Thread(new ParameterizedThread(method));

同じエラーとなりました。

困りました・・・。


引用返信 編集キー/
■6946 / inTopicNo.4)  Re[3]: スレッド生成
□投稿者/ シャノン (205回)-(2007/08/27(Mon) 19:55:06)
No6944 (太郎(初心者) さん) に返信
> 以下のように変更しましたが、
>
> Thread AThred = new Thread(new ParameterizedThread(method));
>
> 同じエラーとなりました。

同じことです。
ParameterizedThreadStartコンストラクタには、ParameterizedThreadStartと同じシグネチャのメソッドを渡さなければなりません。
ThreadStartのシグネチャは何ですか? ParameterizedThreadStartのシグネチャは何ですか? methodのシグネチャはそれらと一致していますか?
引用返信 編集キー/
■6950 / inTopicNo.5)  Re[4]: スレッド生成
□投稿者/ 倉田 有大 (78回)-(2007/08/27(Mon) 20:43:26)
public void method()

とりあえず、引数が無いメソッドのスレッドの作成に挑戦されてはいかがでしょう?
引用返信 編集キー/
■6952 / inTopicNo.6)  Re[5]: スレッド生成
□投稿者/ 倉田 有大 (79回)-(2007/08/27(Mon) 20:48:58)
No6950 (倉田 有大 さん) に返信
> public void method()
>
> とりあえず、引数が無いメソッドのスレッドの作成に挑戦されてはいかがでしょう?

ぐぐると、引数の戻り値のあるメソッドのスレッドは作成できないとありますね。
何か方法があるのかもしれませんが。
引用返信 編集キー/
■6954 / inTopicNo.7)  Re[6]: スレッド生成
□投稿者/ 太郎(初心者) (4回)-(2007/08/27(Mon) 21:12:57)
引数の戻り値はvoidにしてなくしました。

ただ、INパラメータは指定したいんですけど・・・。

引用返信 編集キー/
■6956 / inTopicNo.8)  Re[7]: スレッド生成
□投稿者/ 渋木宏明(ひどり) (318回)-(2007/08/27(Mon) 22:25:24)
渋木宏明(ひどり) さんの Web サイト
> ただ、INパラメータは指定したいんですけど・・・。

引数を1つだけ受け取るメソッドをスレッドプロシージャとして呼び出すことは可能です。

ただし、引数型は object 型のみです。逆に言えばどんな型でも渡せますが、スレッドプロシージャ内で適切な型にキャストしなければなりません。

要するに、スレッドプロシージャとして利用可能なメソッドは以下の2種類ということです。

void ThreadProc();

void ThreadProc(object param);

# こういった情報は漫然と検索サイトにお伺いを立てるのではなく、ヘルプ=MSDN Library から得るべきです。

仮にスレッドプロシージャに long 型のパラメータを1つ与えたいなら、スレッドプロシージャは

void ThreadProc(object param)
{
long a = (long)paran;

// 必要な処理
}

のようになります。

これを

Thread workerThread = new Thread(new ParameterizedThread(ThreadProc));

long param = 100;
workerThread.Start(param);

のように呼び出します。

複数パラメータを同時に渡したい時は、引き渡したいパラメータをすべて格納する適当なクラスを作って、それをパラメータとして渡せばよいです。

引用返信 編集キー/
■6966 / inTopicNo.9)  Re[8]: スレッド生成
□投稿者/ 太郎(初心者) (5回)-(2007/08/28(Tue) 09:46:51)
回答ありがとうございました。

皆様の意見を参考にして調べなおしてみます。

ありがとうございました。
引用返信 編集キー/
■6967 / inTopicNo.10)  Re[9]: スレッド生成
□投稿者/ 太郎(初心者) (7回)-(2007/08/28(Tue) 09:47:50)

> 回答ありがとうございました。
>
> 皆様の意見を参考にして調べなおしてみます。
>
> ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -