3

バックグラウンド

私は、アウトプロセス COM サーバー (C# で記述されたラップされた .NET コンポーネント) を呼び出す Visual Basic のアプリケーションに取り組んでいます。このコンポーネントは長い計算 (10 秒以上) を実行し、計算の進行中に GUI (VB6 側の一部) と対話しようとすると、プログラムは次のような (および正確な文言で) メッセージを出力します。 :

http://www.symantec.com/business/support/library/BUSINESS/ATLAS/images_v1/324876/dlo.jpg

質の悪い画像で申し訳ありません。職場からスクリーンショットをアップロードすることはできません。

質問

プログラムによって、またはプロジェクトまたはビルド構成を通じて、このメッセージを抑制する方法はありますか?

補遺1

App.OleServerBusyTimeout を設定しようとすると、ランタイム エラー 369 (ActiveX DLL では無効な操作) が発生します。これは ActiveX dll の一部であり、これを変更することはできません。メインアプリケーション内でそのプロパティを設定するか、呼び出しを既存のタイムアウトよりも短くする以外に解決策はありませんか?

4

1 に答える 1

0

メッセージが表示されないようにする場合 (たとえば、カーソルを砂時計に変更した場合) は、App.OleRequestPendingTimeoutand notを使用しますApp.OleServerBusyTimeout

オプションで、 を使用して代替メッセージを設定することもできますApp.OLERequestPendingMsgText。そうすることで、カスタム メッセージが [OK] ボタンだけでユーザーに表示されます。これにより、混乱が大幅に軽減されます。

サンプルコードは次のとおりです。

' set up special message if user interacts with application while waiting on the
' long-running operation to complete
' see http://support.microsoft.com/kb/138066

Dim originalOLEPendingMessage As String
originalOLEPendingMessage = App.OleRequestPendingMsgText
App.OleRequestPendingMsgText = "Please be patient while your request is processed."

Dim originalOLEPendingTimeout as Long
originalOLEPendingTimeout = App.OleRequestPendingTimeout
App.OleRequestPendingTimeout = 10000

On Error GoTo Finally
' Call long-running process here

Finally:
' If an actual error occurred we want to capture all the properties of Err
' so we can re-raise it after we clean up
Dim errNumber As Long
Dim ERRSOURCE As String
Dim errDesc As String
Dim errHelpFile As String
Dim errHelpContext As Long

errNumber = Err.Number
ERRSOURCE = Err.Source
errDesc = Err.Description
errHelpFile = Err.HelpFile
errHelpContext = Err.HelpContext

App.OleRequestPendingMsgText = originalOLEPendingMessage
App.OleRequestPendingTimeout = originalOLEPendingTimeout 

If errNumber <> 0 Then
    Err.Raise errNumber, ERRSOURCE, errDesc, errHelpFile, errHelpContext
End If

詳細については、Microsoft ナレッジ ベースの記事「OLE オートメーション サーバーのタイムアウトと同期を処理する方法」を参照してください。

于 2012-10-17T20:38:27.533 に答える