- - PR -
「しばらくお待ちください」の出し方を教えてください。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-03-05 17:54
はじめまして。
satoko-1 と申します。 宜しくお願い致します。 すべてフォーム上での処理です。 SQLを利用してリストビューにデータを表示するのに、 数秒かかってしまう処理(以降、処理A)があります。 全然時間がかからない処理もあるので、 処理Aに関してのみ、「しばらくお待ちください」という メッセージを出したいと思い、 テキストボックス txtWait なるものを作り、 以下のようにしました。 txtWait.Text = "しばらくお待ちください" ' 処理A txtWait.Text = "" これで、処理Aが始まる前に「しばらくお待ちください」が表示され、 処理Aが終わったら文字が消えると思っていたのですが、 どうやら処理Aが終わってから「しばらくお待ちください」という 文字が表示され、次の瞬間には文字が消えているようなのです。 txtWait.Text = "しばらくお待ちください"を読み込んだら、 すぐにテキストボックスに文字を書き込むには どうしたらよいか教えてください。 長くなってしまい、すみません。 どうか宜しくお願い致します。 | ||||
|
投稿日時: 2009-03-05 18:13
VB.NETでしょうか?・・・VB6でしょうか?
言語バージョンぐらい書きましょう。 VB.NETだと仮定して・・・
で、一応想定した動きになると思います。 が!! ...上記の様な対応は、お勧めはしません。 時間の掛かる処理などは、通常別スレッドを使用し メインスレッドをブロックしないようなコーディングを行います。 | ||||
|
投稿日時: 2009-03-05 18:25
早速のお返事ありがとうございます。
大変失礼致しました。 VB.NET です。 うまく処理することができました。 ありがとうございます。 今回は、単なるデータの照会用なので、 1つのフォーム上での処理ですが、 他のプログラムを作る際は、 時間のかかる処理は別スレッドを使用し、 メインスレッドをブロックしないコーディングをする。 ということに注意したいと思います。 どうもありがとうございました。 | ||||
|
投稿日時: 2009-03-05 19:46
Form がひとつだから問題がないということでもないです (趣味で作成しているのであれば構いませんが)。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2009-03-06 10:33
貴重なご意見ありがとうございます。
趣味で作成しているわけではないので、 このプログラムをリリースしようとしているわけですが、 メインスレッドをブロックしないようなコーディングをしないと、 それをリリースされた企業としては、たまったもんじゃないですよね。 プログラムを作る際には、 そういうことも考えながら作っていきたいと思います。 ただ、そのことに関して、もう1つ質問させてください。 データを参照するだけのプログラムで、 データが変更になることはないのですが、 そういう場合でも排他制御をした方がいいのでしょうか。 データの更新が無ければ必要ないと勝手に思っていたのですが… | ||||
|
投稿日時: 2009-03-06 12:18
かずいといいます。
排他制御に関してですが、 照会機能でも排他制御がいるかどうかは顧客要件(業務要件)によると思います。 照会画面で見てる内容が、更新機能により変更されてもいいかなど その画面の性質や運用方法などで変わってくると思います。 基本的には、排他制御しないのが一般的ではあると思いますが、 企業相手のプログラムということなので、確認して実装を考慮するべきです。 | ||||
|
投稿日時: 2009-03-06 13:06
メインスレッドをブロックするのは、どういう問題があるのでしょうか?
せいぜい、Xで閉じないというような「親切じゃない」という程度かと 思っていました。 そのため、ユーザーインターフェースは悪くなりますが、 作り込みが単純になるぶん、メインスレッドで処理する方がよいかと 思っていました。 どんなもんでしょうか? | ||||
|
投稿日時: 2009-03-06 14:48
UIが悪くなるのは、ユーザ側が了承してれば構わないと思います。
私は、OS(Windows)からみて「行儀の悪いアプリケーション」に なってしまうのが問題だと思います。 確か・・・5秒程度応答がないアプリケーションは 「応答なし」の烙印を押されます(ウィンドウタイトルに「応答無し」付与) また、Xボタンを押した時には「強制終了しますか?」と聞かれます。 つまり、Windowsから見れば「フリーズしている可能性あり」と見なされています。 また、他アプリがSendMessageによるWM送出を行った場合 メッセージを処理しない限り、送出側のSendMessageは制御を返しません。 結果、他アプリも処理が止まってしまいます。 通常、ウィンドウメッセージを処理するスレッドでは 重い処理を行わない・重い処理中にメッセージ応答処理を時折入れる等を行い ウィンドウメッセージを溜め込まないようにする必要があります。 Windowsアプリケーションとしての、もっとも基本的なマナーではないでしょうか。 ユーザーが気にしてないからとか楽にコーディングできるからなどの理由は マナーを無視しても構わない理由にはならないと思います。 .NETの場合、かなり楽にコーディング出来るのと思いますがね。 (BackgroundWorkerも用意されていますし) |