- - PR -
処理を一度しか走らせないようにしたい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-10 18:25
いつもお世話になっております。
C#,NET でWEBアプリの開発をしております。 現在困っている事象ですが、 ボタンをクリックすると走る処理がだいぶ時間がかかる処理なため、 処理が終わるのを待っている間にもう一度ボタンを押すと、 二重に処理が走ってしまいます。 その処理が走っている間は、そのボタンを押しても処理は走らないようにしたいのですが、 方法をご存知の方、いらっしゃいませんか? いくつか検証してみたのですが、 以下のように、フラグを設けて、クリックイベントの最初で、フラグをたて、 フラグがたってたら処理はしないということをやってみてもダメでした。 ★Clickイベント if(Flg==0) { Flg=1; 時間がかかる処理 } Flg=1;と書いてある行を通った時に、Flgに1がセットされるわけではないみたいですね。 クリックイベントの最初でボタンを押下不可にしてみても、 同じくダメでした。 押下不可になるのはClickイベントが完了した時なようです。 | ||||||||
|
投稿日時: 2005-11-10 18:29
Flgをプロシージャ内のStatic変数(VBでいうところの)にしたらどうなりますか? #StaticはC#ではなんだろう。。。
#↑書いては見たもののなんか根本的な解決で無いような気がしてきた(--; [ メッセージ編集済み 編集者: まどか 編集日時 2005-11-10 18:35 ] | ||||||||
|
投稿日時: 2005-11-10 18:37
これって、「1回だけ」とはいえ、「接続してきた人ごとに1回だけ」ですよね?
staticにすると、「全体で1回だけ」になりません? セッションにフラグを持たせる、ですかね。 ___________________________________________________________________ □ written by Jitta on 2005/11/10 □ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006 _________________ | ||||||||
|
投稿日時: 2005-11-10 18:37
こんにちは。
処理した結果がクライアントに返って初めて意味を持ちます。なので、「時間のかかる処理」をしている間は、クライアントに結果が返っていないので、ボタンは押下不可になりません。
どこかに保持しておかないと、また 0 に戻ってしまいます。 まぁいずれにせよ、押下不可と同様、クライアントに処理が返ってないので意味ないです。 Javascript に詳しくないので断言できませんが、クライアントスクリプトで押下不可にしてみるとか、一度別の画面にするだとか工夫が必要みたいですね。 以前 @IT の掲示板で同様事を議論している所がありました。見つけたらまた書きます。 | ||||||||
|
投稿日時: 2005-11-10 18:37
Webですよね。
この場合、サーバ側の処理はブラウザからのリクエストが上がることにより 実行されます。 > 以下のように、フラグを設けて、クリックイベントの最初で、フラグをたて、 > フラグがたってたら処理はしないということをやってみてもダメでした。 ブラウザ側で2回ボタンが押されたら、この処理が動くためのサーバへの リクエストが2回あがってしまいます。 なので、このようなフラグで問題を解決することはできません。 ブラウザ側のスクリプトでボタンをクリックした時点でボタンを処理できない ようにする、とか、長い処理に入る前に処理中を表示するようなページに 遷移してしまう等の仕組みを考える必要があります。 なお、処理中を表示するページをどうつくるか、という話は「ASP.NETでいってみよう」 という本に載っているやり方が私はスマートだと思います。 | ||||||||
|
投稿日時: 2005-11-10 18:41
Webに疎いのがばればれですね<私m(_ _)m | ||||||||
|
投稿日時: 2005-11-10 19:01
みなさま、返信ありがとうございました。
やはりこのようなFlgでは実現できないのですね。。。 私もWEBについてはよく分かっていないので、とても勉強になりました。 ちょっと最初の質問からはずれますが、 staticについて教えてください。 Jittaさんにの返信によると、staticで宣言された変数というのは、 Webアプリを実行してきた人、みんなが共有してしまうということですか? | ||||||||
|
投稿日時: 2005-11-10 19:03
「static 変数」と CShaper な人に言うと誤解を招きます。 C# の static (静的) 変数は、VB でいうところの Shared (共有メンバ) 変数になります。 VB でいうところの Static なローカル変数は、C# にはありません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |