- ベストアンサー
VB.NETでスレッドって信用できないの!?
前回の質問、http://okweb.jp/kotaeru.php3?q=1395050で、 フォームロードとDB接続をスレッドで行うことにしたのですが、 SEが、「VBでスレッドやるのは危険だ!そんな手法やるのはド素人だ!」とかで、むちゃくちゃ言われました。 (そのSEの方の時代のVBは.NETじゃなかった思うのですが・・・) 「Form_Activatedイベントとか、フォームのイベントでやれ!!」といわれ、トホホ。。。 VB.NETで、スレッド使うのって、そんなに悪いのですか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは、じゃんぬねっと です。 Refresh() しても真っ白でしょうか。
その他の回答 (1)
- JeanneNet
- ベストアンサー率48% (100/208)
こんにちは、じゃんぬねっと です。 スレッドセーフっていう言葉を調べてみるとか。 そのアプリケーションが完了、もしくは DB に何らかの処理が発生するまでに終わらせる (同期) させなきゃならないので、危険と言えば危険ですね。 TopMost でないなら、Activate でやってはどうでしょ? ... その前に DB 接続なんてすぐ終わると思うんですが...。 本当に DB 接続で時間を消費しているのでしょうか。 どうやって特定したのかにもよりますが。
補足
毎度、ご回答ありがとうございます。 メニュー用のフォームがその上にある予定なので、最上位フォームではないです。 Form1_Activateで試してみました。 フォームウインドが起動した後、DB接続されるのですが、それまでフォームウインド内は真っ白でフリーズしたようになります。 Form1_Activatedでも試しましたが、同様でした。 フォームウインド内がきちんと表示されたあと、DB接続させたいとなると、何らかのコントロールイベント(最初のコントロールにフォーカスが行った時とか)を利用するしか、ないですかね? DB接続の時間というのもあるのかもしれませんが、何らかの原因でDBに接続できなかったとき、フォームウインドが起動しないのはダメだとの仕様なのです。 理由は、、、 実際、フォームウインドからオペレーションする人が戸惑う。 プログラムバグなのかDB接続問題なのか、切り分けができない。 というところらしいです。
お礼
ありがとうございます! Form1_Activateイベントで、Refresh() 後にDB接続を実行させることで実現できました。 これで、フォーム内も表示されます。 DB接続状態は、ステイタスバーに表示させることで、接続中か完了か失敗かを表すことにしました。 あとは、DB接続失敗時に、フォームから入力できないようにすることで、仕様にだいぶ近づけると思います。 大変助かりました。 毎回、ありがとうござます。