- PR -

スレッド処理について(C#)

投稿者投稿内容
shin2
ベテラン
会議室デビュー日: 2004/03/10
投稿数: 58
投稿日時: 2005-09-08 00:14
みなさま、ありがとうございます。

御指摘の通り、スレッドそのものの利用方法に不適切なところがあるかもしれません。

スレッド中の重たい修理の中身が、特殊なソフトウェア(コンソール上で実行)の処理上発生するファイル作成にかなり時間がかかるためです。

プログラマで制御できない(しにくい)部分であるため、スレッド化を思いついた次第です。繰り返しになりますが、割り込み処理がしにくいため、その対応方法に苦慮しているのが現状です。

ファイルを作成するのに時間がかかるため、どのようにしたらいいかわからないのです。
今のお話をしたら今までの情報でどれがよいか、どなたかわかりますか??

自分でも随分無責任な発言だなと思いますが、今回勇気を出して(?)スレッド処理にチャレンジしています。従ってみなさんから寄せられた情報のうちどれがよいのか、自分では判断できません。

すみませんが、もう少し教えていただけないでしょうか??
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-09-08 00:29
私は特にマルチスレッドにしても問題ないように思います。
処理が終わったら通知して欲しいんですから、やはりイベントで通知してもらうのが筋じゃないでしょうか?(他の皆さんの方法は試していません。皆さんのほうがすごくいい方法かも)
sia
常連さん
会議室デビュー日: 2004/05/02
投稿数: 38
投稿日時: 2005-09-08 07:57
囚人さんの仰るとおり、マルチスレッド化してよいシナリオだと思います。

で上記のようなポーリングループもあると書きましたが、
私なら通常は下記のようにします。

button1_Click()
{
//スレッドを起動。(非同期デリゲートもしくはスレッドクラスによる)
//すぐにこのイベントハンドラの処理から抜けてしまう。
//抜けたあとで、変な処理がされないようにボタンの無効化などを
//あらかじめ行っておくこともある。
}

private void func_1()
{
/* スレッドの本体(重い処理)*/
//イベントでスレッドを終了通知する。
 Finished();
}

//スレッドから呼ばれるイベントハンドラ
private void thread_Finished()
{
 //なんらかの終了処理
 //ただし、呼び出しのマーシャリングが必要な場合があります。
 //下記記事参照
}

http://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html

大まかな手順を書いてみましたが、
具体的にどのようにすればよいかは、自分で判断して、
自分で考えるべきところだと思います。

スキルアップ/キャリアアップ(JOB@IT)