控制超时间隔

可以使用 App 对象的两个属性设置,决定 Visual Basic 何时显示“部件忙”和“部件请求挂起”对话框的超时间隔。

OLEServerBusyTimeout 属性

决定在显示“部件忙”对话之前,Visual Basic 反复尝试 Automation 请求的时间。缺省值是 10000 毫秒(10 秒)。

OLERequestPendingTimeout 属性

决定在显示“部件请求挂起”对话框期间,在响应鼠标单击、按键事件和其它事件之前,Visual Basic 要等待多久。缺省值是 5000 毫秒(5 秒)。

下面例子演示,为调用假设的 BusinessRules 对象的 StockAnalysis 方法,如何调整和重新设置超时值。

Public Sub SetTimeouts(ByVal lngComponentBusy As _
Long, ByVal lngRequestPending As Long)
   App.OLEServerBusyTimeout = lngComponentBusy
   App.OLERequestPendingTimeout = lngRequestPending
End Sub

Public Sub ResetTimeouts()
   App.OLEServerBusyTimeout = 10000

   App.OLERequestPendingTimeout = 5000
End Sub

Private Sub cmdFullAnalysis_Click()
   On Error Goto FullAnalysis_Error
   '设置很短的超时。2 秒钟之后用户将被提醒,
   '并且按键或单击将显示“部件忙”和“部件请求挂起”对话框。
   SetTimeouts 2, 2
   Me.MousePointer = vbHourglass
   gobjBusinessRules.StockAnalysis txtNYSECode.Text, _
   ATYPE_FULL
FullAnalysis_Cleanup:
   Me.MousePointer = vbDefault
   ResetTimeouts
   Exit Sub

FullAnalysis_Error:
   If Err.Number = &h80010001 Then
      MsgBox "Analysis cancelled"
   Else
      '处理其它错误的代码...
   End If
   Resume FullAnalysis_Cleanup
End Sub

可以把这些超时中的任一个设置成很大的值,因为它们作为长整型数据 (Longs) 存储。例如,86,400,000 毫秒是一天,这等同于无穷超时。但是当这样做时,在部件不再忙或请求挂起完成之前,有把程序锁死的危险。

重点 由于这些超时值是 App 对象的属性,它们也对用 OLE 容器控件或工具箱链接或嵌入的文档起作用。如果正在使用链接的或嵌入的文档,并且为 Automation 请求改变了这些属性,那么完成以后应重新设置其值。