3

背景

我正在使用 Visual Basic 开发一个调用进程外 COM 服务器(用 C# 编写的包装 .NET 组件)的应用程序。该组件执行冗长的计算(超过 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.OleRequestPendingTimeout而不是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 回答