我正在使用Visual Basic中的一个应用程序调用一个进程外的COM服务器(一个用C#编写的包装的.NET组件)。此组件执行冗长的计算(10秒加)并尝试与GUI(VB6端的一部分)进行交互,同时计算正在进行中,导致程序发出类似于(并具有以下精确措辞)的消息:
http://www.symantec.com/business/support/library/BUSINESS/ATLAS/images_v1/324876/dlo.jpg
对于质量糟糕的图片感到抱歉,我无法在任何地方上传屏幕。
有没有办法以编程方式或通过项目或构建配置来抑制此消息?
尝试设置App.OleServerBusyTimeout会产生运行时错误369(操作在ActiveX DLL中无效)。这是ActiveX dll的一部分,我无能为力可以改变它。除了在主应用程序中设置该属性,或者将调用减少到小于现有超时之外,是否没有其他解决方案?
答案 0 :(得分:0)
如果要阻止显示任何消息(例如,如果您已将光标更改为沙漏),则需要使用App.OleRequestPendingTimeout
而不是App.OleServerBusyTimeout
。
或者,您也可以使用App.OLERequestPendingMsgText
设置备用消息。这样做只会通过“确定”按钮向用户显示自定义消息 - 这更容易让人感到困惑。
以下是一些示例代码:
' 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知识库文章How To Handle OLE Automation Server Timeout and Synchronization。