none
プログラムの応答に関する警告メッセージを非表示にする方法 RRS feed

  • 質問

  • Visual Studio 2005で、あるアプリケーションソフトを、そのソフトのAPIを用いてコントロールするプログラムを作成しています。
    (そのAPIの参照の型は「.NET」ではなく「COM」です)
    しかし、そのアプリケーションソフトがファイルの読み込みなどに時間がかかっていると、以下のメッセージが表示されてプログラムの実行が中断します。

    「プログラムが応答しないため、この作業を完了できません。[切り替え」を選んで、問題を解消してください。」

    「再試行」ボタンを押せば、とりあえずプログラムは継続できるのですが、煩わしいのでこのメッセージを表示しないようにしたいのですが、
    どのようにしたらよいかご存知の方はいないでしょうか?
    なお、Excel VBAでは Application.DisplayAlerts = False というコマンドで実現できます。
    2010年1月12日 6:35

回答

  • 「ファイルの読み込みなどに時間がかかっている」
    ↑の処理を、UIのスレッドとは別のスレッドで処理して、「応答しない」という状態を起こさないようにした方が良いと思います。
    • 回答としてマーク 菊地俊介 2010年1月26日 9:20
    2010年1月12日 7:33
  • # 色々と調べまわっているうちに遅きに失した感がありますが...

    UI スレッドを長時間ブロックしてしまうのは具合が悪いです。

     とあるコンサルタントのつぶやき : Part 1. Windows フォームのマルチスレッド処理の基礎
     http://blogs.msdn.com/nakama/archive/2009/03/31/part-1-windows.aspx

    なので、COM 呼び出しの部分を別スレッドに逃がすのが定石です。

     C# Best approach for a responsive UI during SQL query using COM interop - Stack Overflow
     http://stackoverflow.com/questions/1805514/c-best-approach-for-a-responsive-ui-during-sql-query-using-com-interop


    なお、Excel VBAでは Application.DisplayAlerts = False というコマンドで実現できます。
    ちなみに、このコマンドは「メソッド呼び出しの中で何かエラーが発生したときに、エラーメッセージを出さない」というものです。
    UI スレッドを長時間ブロックした場合のメッセージとは異なるはずです。
    (このコマンドを発行しておいても、Excel で長時間かかる処理を実行すると、やっぱり同様のメッセージが出ると思います。)
    • 回答としてマーク 菊地俊介 2010年1月26日 9:20
    2010年1月12日 7:43

すべての返信

  • 「ファイルの読み込みなどに時間がかかっている」
    ↑の処理を、UIのスレッドとは別のスレッドで処理して、「応答しない」という状態を起こさないようにした方が良いと思います。
    • 回答としてマーク 菊地俊介 2010年1月26日 9:20
    2010年1月12日 7:33
  • # 色々と調べまわっているうちに遅きに失した感がありますが...

    UI スレッドを長時間ブロックしてしまうのは具合が悪いです。

     とあるコンサルタントのつぶやき : Part 1. Windows フォームのマルチスレッド処理の基礎
     http://blogs.msdn.com/nakama/archive/2009/03/31/part-1-windows.aspx

    なので、COM 呼び出しの部分を別スレッドに逃がすのが定石です。

     C# Best approach for a responsive UI during SQL query using COM interop - Stack Overflow
     http://stackoverflow.com/questions/1805514/c-best-approach-for-a-responsive-ui-during-sql-query-using-com-interop


    なお、Excel VBAでは Application.DisplayAlerts = False というコマンドで実現できます。
    ちなみに、このコマンドは「メソッド呼び出しの中で何かエラーが発生したときに、エラーメッセージを出さない」というものです。
    UI スレッドを長時間ブロックした場合のメッセージとは異なるはずです。
    (このコマンドを発行しておいても、Excel で長時間かかる処理を実行すると、やっぱり同様のメッセージが出ると思います。)
    • 回答としてマーク 菊地俊介 2010年1月26日 9:20
    2010年1月12日 7:43
  • 皆様、こんにちは。

    囚人さん、totojoさん、回答ありがとうございます。

    SozoDelphinusさん、はじめまして。 フォーラムのご利用ありがとうございます。
    その後いかがでしょうか?  問題は解決しましたか?
    有用な情報と思われたため、囚人さん、totojoさんの回答へ回答マークをつけさせていただきました。

    今後ともフォーラムをよろしくお願いします。
    それでは!
    2010年1月26日 9:23