• 締切済み

実行させた処理の終了を待ちたいのに・・・

VB.NETで、とても困っています。 現在実行中のアプリから別のアプリをCreateObjectで起動して、その起動したアプリに対してイベントを行うというプログラムを作っています。 処理手順としては、 (1)アプリを実行 (2)実行したアプリ内のあるプロパティをちょっと変更  (表示名称を変えるとか、そのくらいの処理です) これだけのことなのですが、(2)の実行がうまく出来ません。 ところが、(1)と(2)の間に、(1)のアプリのプロパティを取得してメッセージボックスを表示、などといった、処理を中断させる処理を挿入すると、思ったとおりのことが出来るようになります。 つまり、(1)の処理が完全に終わっていないうちに(2)のイベントを発生させようとしているようです。 こういう場合、VB6.0のときはDoEventsで解決したのですが、VB.NETではなぜか解決できません。 何か他に方法はないものでしょうか? メッセージボックスを挿入する手段は使えませんので、何とかしなくてはいけないのですが。 よろしくお願いします。

みんなの回答

回答No.1

>別のアプリをCreateObjectで起動して アプリケーションは市販のものですか? 差し支えなければ、製品名もあると、再現しやすいのですが、、、 >VB6.0のときはDoEventsで解決したのですが、VB.NETではなぜか解決できません。 .NETで Application.DoEvents() をやってみて、うまくいかなかったということですよね?

関連するQ&A

  • コンボボックスのイベント 更新後処理をしたい

    VB.NETのテキストボックス、コンボボックスで アクセスのAfterUpdate(更新後処理)と同じ動きをするイベントはどれですか? 「TextChanged」を使うと 例えばテキストボックスに「あいう」の「う」を打ち終わってから実行したいのに 「あ」を入力するだけで実行されてしまいます。 「あいう」と入力し終わってから実行するイベントはどれでしょうか? よろしくお願い致します。

  • 終了してもプログラムが実行したまま(VB)

    非常に時間のかかる繰り返し処理を行なうプログラムを作りました。どのくらい、プログラムが進行しているのかわかりやすくするため、 Progress.Show でProgressという名前のフォームを表示し、そこに、プログラムが何%終わったのか表示するようにしました。 プログラムはDo Loop文が使ってあるので、何%終わったのかを表示するためにLoopした回数を取得して、それをフォームに表示することにしましたが、どこかで調べたら機械は、Do Loopのあいだはフォーム上に文字を表示するのに手が回らないからDoEventsを使ってイベントを実行させなさい、といわれました。 そこまではうまくいきました。プログラムを実行すると、プログラムが実行されて何%終わったかもちゃんと表示できるようになりました。 ところが、プログラムの実行中にフォームの右上の×ボタンを押したところ、フォームは画面から消え、プログラムが終了したように見えるのに、VB Editorでは[実行中]となっており、終わってくれません。ずっとDo Loopが実行されたままです。 Private Sub Form_Terminate() のところに Unload Progress と書いても、「Unloadメソッドは使えません」などというエラー・メッセージが出ます。(フォーム上にボタンを置き、そこをクリックするとUnloadするようにしてみましたがやはり同じことを言われました。) 原因は何でしょうか? フォームをUnloadする、ということの意味をちゃんと理解していないのでいけないのだと思うのですが、調べてもよく言っていることがわかりません。 よろしくお願いします。

  • ディスクが挿入されていない時のエラー処理について

    WIndows2000(sp2) VB6.0(sp) で開発中です。 if Dir$(Dir_Name, vbDirectory + vbNormal) <> "" Then ~ と、ディスクの状態を調べた時、ディスクが入っていないと、 次のようなメッセージボックスが表示されます。 「vb6.exe-ディスクがありません。  ドライブにディスクがありません。ディスクをドライブA:に挿入してください。  キャンセル,再実行,続行」 このメッセージが表示された後に、OnErrorの処理に入ります。 このメッセージを表示せず、直接OnErrorの処理に入るには どうしたらよいのでしょうか? ご存知でしたら教えてください。 よろしくお願いします。

  • OSシャットダウン時の常駐アプリ終了について

    現在VB2005にて常駐アプリの開発を行っています。 OSはWindowsXPです。 起動はOS起動時にスタートアップより起動するのですが、 OSのシャットダウン時に常駐アプリが終了していない為、 「このプログラムからの応答がありません(待機、終了、キャンセル)」が表示されます。 この方法を回避するには、シャットダウンを常駐アプリ側で検知してアプリ自身が終了処理をすると思いますが、方法がよくわかっていません。 http://dobon.net/vb/dotnet/system/sessionending.html ↑のURLを参照してみたのですが、シャットダウン時にメッセージの表示はされるのですが、メッセージ表示部をアプリ終了処理に置き換えても、終了処理が行われませんでした。 どなたか、お分かりになる方ご教授いただければと思います。

  • バッチ処理でAcess処理終了後にメッセージがでるのはなぜですか?

    バッチファイルで、Access2000のマクロ「AutoExec」を起動させて処理をおこないたいのですが、 「AutoExec」の処理が終了し、Accessが終了すると、以下のメッセージボックスが表示されてしまいます。 メッセージボックスの内容 「'C\xxx.mdb'がみつかりません。名前を正しく入力したかどうかを確認してから、やり直してください。 ファイルを検索するには、「スタート」ボタンをクリックしてから、[検索]をクリックしてください。」 Access2000は、該当のディレクトリに、置いていますし、 ちゃんとAccess2000のマクロ「AutoExec」の処理は実行されています。 Access2000の処理は、正常に終了しているのに、こんなメッセージが表示されては、 意味がありません。 このAccess2000の「AutoExec」のバッチ処理は、何十個もあるバッチ処理の一部です。 バッチ処理の途中でメッセージが出るとその後自働で、行われる予定のバッチ処理が、 行われないので非常に困ってます。 どうしたらよいですか? とにかく、バッチ処理で、Access2000を起動させ、マクロ「AutoExec」を使用して処理を行いたいのです。 その間、どんなことがあっても、メッセージボックスの表示などで、処理を止めてはならないのです。 お願いします。誰か教えてください。 バッチファイル名(このバッチファイルの次に、Access2000とは、無関係のバッチファイルの処理がたくさんあります) xxx.bat バッチファイルの内容 CALL c:\yyy.mdb(又は、startc:\yyy.mdb)

  • イベントの取りこぼしについて

    教えて下さい。 VBで構築したアプリケーションにおいて、無限ループ内で処理を判断し、実行するようなプログラム構築にしています。この無限ループ内に「DoEvents」をセットしています。これによりOSに溜まっている、各イベントを処理していると思うのですが、処理するイベントに取りこぼしは発生しないのでしょうか? 現在、A/Dボードを実装しており、2ms周期でVBのイベントが発生するようなソフトになっています。「DoEvents」実行時に、OS側が処理に要する時間は、キューに溜まっているイベント数×1回のイベント処理時間で単純に導けるものでしょうか? また、CPUのスペックを2倍にすると、単純に処理時間は半分と計算できるものでしょうか?

  • MsgBox表示中のタイマーイベント

    VB6についての質問です。 MsgBox関数でメッセージBOXを表示させると、それが処理されるまで他のイベント(タイマーイベント)って発生しませんよね? 発生させようとしたら、自作のメッセージBOXを使うしかないでしょうか?

  • VB.NETでMessageBoxを表示したいのですが

    Visual Studio .NETでWebアプリケーションをしております。 言語はVB.NETです。 メッセージボックスを表示しようとすると、エラーが出てしまうのですが、 Msgboxを表示するにはどうすればいいのでしょう。 エラーメッセージは 「アプリケーションが UserInteractive モードで実行されていないときに、 モーダル ダイアログまたはフォームを表示することはできません。 サービス アプリケーションからの通知を表示するには、 ServiceNotification または DefaultDesktopOnly スタイルを指定してください。 」 といったサーバエラーです。 そこでUserInteractiveモードを調べてみると、 「このプロパティは、プロセスがサービス プロセスとして実行されている場合、または Web アプリケーション内から実行されている場合にだけ false になります。 UserInteractive が false の場合は、ユーザーが対話するための GUI が存在しないため、 モーダル ダイアログまたはメッセージ ボックスは表示しないでください。」 ということが書いてありました。 ちなみにWindowsアプリならVB.NETでもMsgbox関数で簡単に表示できたのですが。。 どこかで何か設定しなければならないのでしょうか。 お分かりの方、教えてください。 よろしくお願い申し上げます。

  • MSFlexGridで↑や↓押下時の処理

    現在VBの勉強をしております(WindowsXp、VB6.0) MSFlexGridの行を選択すると、行のデータをテキストボックスへ表示する、といった処理を実装したんですが、キーボードの「↑」や「↓」押下時に、選択行は変わるんですが、クリックイベントでもフォーカスイベントでも処理を拾えません・・・。 まだ試してはいないんですが、keyDownイベントで、「↑」「↓」を判断し、更にグリッドにフォーカスが存在する場合に、1行上(または下)のデータをテキストボックスに表示する。 という処理をしないと不可能でしょうか? どう考えても上記の方法はスマートでは無いなぁと思い、何か良い方法があれば教えていただきたく質問させていただきました。 よろしくお願いいたしますm(__)m

  • VB6.0でACCESSのコマンドを実行するには?

    教えてください。よろしくお願いします。 VB6.0のプログラムからACCESSに文字データを渡し、それをキーにしてACCESSのテーブルから該当するデータをACCESSのテキストボックスに表示させたいのですが、検索・表示のプログラムはACCESSで記述ずみですので、VBからは引数を渡して、ACCESS側のVBAのプログラムを実行させたいのです。 その際、ACCESSの引数を渡すMDBが起動していなかったら、起動させて、上記の処理をさせたいのですが。 分かりづらい文章で申し訳ありませんが、どなたかアドバイスをお願い致します。

専門家に質問してみよう