- - PR -
長い処理中にボタンを複数回クリック
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-04-21 13:43
はじめまして。るぱんと申します
現在作成中のプログラムで以下のような処理を 行っています。 private void button1_Click(object sender, System.EventArgs e) { this.button1.Enabled = false; System.Threading.Thread.Sleep(2000); System.Diagnostics.Trace.WriteLine("in"); this.button1.Enabled = true; } 上記の処理でボタンがクリックされてボタンが使用不可な 状態にしているにも関わらず、処理中にボタンがクリックされると 前の処理が終わった直後にまた処理が行われてしまいます。 処理中にボタンが押されても処理を無効化するためにはどうしたら よいのでしょうか? ご教授よろしくお願いします | ||||
|
投稿日時: 2005-04-21 14:01
あまりいい方法は無いです。 なので、長い時間のかかる処理を行う時は、「処理中(や進捗)」の表示を行うダイアログを出して、処理の中断ボタンくらいしか操作が出来ないようにデザインされたアプリケーションが多いのです。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ | ||||
|
投稿日時: 2005-04-21 14:07
Webでしょうか?Winでしょうか?
Webであれば、アイデアが無くもない… | ||||
|
投稿日時: 2005-04-21 14:18
今日は。
処理が終わるまでボタンを非表示にするって方法は? _________________ Inspired Ambitious ISMS Assistant Auditor | ||||
|
投稿日時: 2005-04-21 14:20
まゆりんです。
1回しか通さない処理(例えば承認処理とか)ならば、フラグを設けて2回目以降はスルーさせてしまうという方法もあります。 _________________ まゆりん @ わんくま同盟 Blog る。 | ||||
|
投稿日時: 2005-04-21 14:43
るぱんです
直接的な解決方法はないようですね。。 この処理はwinアプリで検索を行うボタンです。 渋木さんのおっしゃられた方法で切り抜けたいと思います。 みなさまご回答ありがとうございました。 | ||||
|
投稿日時: 2005-04-21 21:23
this.button1.Enabled = true; の直前に Application.DoEvents(); するという手もあります。 ※なんでEnabled = falseが思ったように働かないのか考えてみましょう。 ただし、無効になっていないイベントはその場で実行されることになるので、 その辺は問題が起こらないように考えて実装する必要はあります。 | ||||
|
投稿日時: 2005-04-22 09:13
お返事ありがとうございます。 Application.DoEvents(); を行っても結果は同じでした |