- 題名: 別スレッドでの実行について質問です
- 日時: 2008/11/13 14:30:52
- ID: 23366
- この記事の返信元:
- (なし)
- この記事への返信:
- [23368] Re[1]: 別スレッドでの実行について質問です2008/11/13 15:51:11
- [23374] Re[1]: 別スレッドでの実行について質問です2008/11/13 23:05:32
- ツリーを表示
■No23366に返信(KUROBOUさんの記事) > この処理が5秒くらいかかるので、この間に他のボタンを > 押下することが出来ず、別の処理を実行できません。 そういう時には BackgroundWorker を使いましょう。 概要としては、こんな感じ。 呼び出し処理(DB取込ボタン):button1_Click object obj = 任意の引数; // 検索条件など this.backgroundWorker1.RunWorkerAsync(obj); 時間のかかる部分(実際の取り込み処理):backgroundWorker1_DoWork object obj = e.Argument; /* ** ここに 時間のかかる処理を記述 **/ e.Result = 処理結果; // DataSet など 処理完了通知イベント:backgroundWorker1_RunWorkerCompleted if (e.Error != null) { object result = e.Result; // 処理結果 MessageBox.Show("取り込み完了"); } else { MessageBox.Show(e.Error.Message); }
分類:[.NET]
こんにちは。
さて、現在、画面にボタンが複数個配置してあり
その中の1つのボタンを押下すると、DBの内容を
変数へ取り込むという機能があります。
この処理が5秒くらいかかるので、この間に他のボタンを
押下することが出来ず、別の処理を実行できません。
そこで、上記機能を別スレッドで実行してみようと思い、
下記のようなプログラムの変更を行ったのですが、やはり
現象は同じでした。
やりたい事は、ボタン押下でDBの内容を取り込んでいる
間に別のボタンを押して他の処理を実行できないかという事です。
記述に問題があるのでしょうか?
分かる方がおられましたら教えていただけないでしょうか?
【変更前】
private void btnxxx_Click(object sender, EventArgs e)
{
if (classA.Init() == false)
{
MessageBox.Show("ERROR!");
}
}
【変更後】
private void btnComData_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(worker));
t.Start();
}
delegate void SetKoshinDelegate();
private void Kousin()
{
if (classA.Init() == false)
{
MessageBox.Show("ERROR!");
}
}
private void worker()
{
Invoke(new SetKoshinDelegate(Kousin));
}