首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB -等待对象创建

VB -等待对象创建
EN

Stack Overflow用户
提问于 2017-02-01 16:07:05
回答 1查看 348关注 0票数 2

我试图按照示例,使用标准方法从Excel外部访问RhinoScript模块(在我的示例中,Excel365在Windows 10上)。

代码语言:javascript
复制
Dim Rhino As Object
Dim RhinoScript As Object

Set Rhino = CreateObject("Rhino4.Application")
Set RhinoScript = Rhino.GetScriptObject()

但是我在最后一行中遇到了一个“运行时424对象必需”错误。

问题似乎是GetScriptObject没有等待CreateObject完全完成,因为当Rhino4启动时,Windows10的UAC将提示我允许更新程序在允许它打开GUI之前对系统进行更改。如果我调试这些语句并逐行运行,那么Rhino4就有时间在GetScriptObject命中之前完全启动,一切正常。那么,是否有办法让GetScriptObject等到Rhino4完全启动?我尝试过设置一个循环,检查Rhino的值(Nothing?),但是它马上就失败了。我对VB有点陌生,所以对这个可能是新手的问题表示歉意。

谢谢,

哑光

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-01 16:41:35

我对Rhino一无所知,也许有更好的方法来做到这一点。

如果您知道运行时错误是由您所描述的内容引起的,并且Rhino.GetScriptObject最终会成功,那么您可以循环运行,直到它正常工作为止:

代码语言:javascript
复制
Dim iterations As Integer 'max value: 32,767
Do
    iterations = iterations + 1 'will *eventually* overflow if loop keeps failing
    On Error Resume Next 'switch off error handling
    Set RhinoScript = Rhino.GetScriptObject
    On Error GoTo 0 'restore error handling (IMPORTANT!)
    If Err.Number <> 0 And Err.Number <> 424 Then Err.Raise Err.Number ' rethrow
    Err.Clear
    DoEvents ' so that the host app remains responsive while the loop runs
While RhinoScript Is Nothing

注意,如果该数字不是预期的424,则重新引发错误;如果情况没有希望,这将(尝试)阻止无限循环。

关于添加防止无限循环的附加保护的Nathan made a good comment --这里通过递增计数器直到其值溢出其类型(引发运行时错误6)。如果32,768次迭代时间过长,也可以使用常量和If检查。

也许不是最好的解决方案,但应该有效。理想情况下,您应该探索Rhino4.ApplicationAPI,看看它是否公开了可以用来确定实例是否“准备好”使用的任何成员。也许是IsReady,或者State

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41984357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档