检查Revit是否准备好关闭

时间:2013-03-20 16:10:23

标签: revit revit-api

首先,我为任何错别字等道歉。英语不是我的第一语言:)

我为Revit编写了一个插件,现在正在为插件进行自动更新。我已经对更新进行了排序,但我偶然发现了小问题。

我正在检查Revit启动时的更新(当Revit创建Addin应用程序时)

    public Result OnStartup(UIControlledApplication application)
    {
        Result result = CreateApplication(application);
        if (result == Result.Succeeded)
        {
            UpdateService updates = new UpdateService();
            try
            {
                updates.ManageUpdates(application);
            }
            catch (Exception ex)
            {
                NotificationManager.Notify("error", ex.InnerException.Message, messageType.error);
            }
        }
        return result;
    }

如果有更新,我会向用户显示一条消息,询问他/她是否想要更新。如果是,我想为他们关闭Revit并开始更新。

问题在于,此时Revit没有完成加载,如果我以编程方式关闭它,它将抛出一个错误,因为它还没有准备好再关闭5秒钟。

System.Threading.Thread.Sleep(5000);

可以在我的机器上解决问题,但不会在用户上解决问题,因此我需要一种方法来检查Revit是否已准备好关闭(处于允许关闭它的状态)。

所以问题是:有没有办法检查Revit是否可以关闭?有没有人有这样的问题并解决了它?

(我知道当用户关闭Revit时我可以检查更新,但这并不理想......

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以尝试订阅ApplicationIntitialized事件 - 我打赌只有在Revit完全加载时才会被触发。

来自文档:

  

在Revit作为完全初始化启动后引发事件,包括初始化外部应用程序。

所以......在你的OnStartup方法中,做一下这样的事情:

public Result OnStartup(UIControlledApplication application)
{
    Result result = CreateApplication(application);
    if (result == Result.Succeeded)
    {
        application.Application.ApplicationInitialized += new EventHandler(delegate (Object o, ApplicationInitializedEventArgs a) {
            // this code will be deferred until the application is initialized
            UpdateService updates = new UpdateService();
            try
            {
                updates.ManageUpdates(application);
            }
            catch (Exception ex)
            {
                NotificationManager.Notify("error", ex.InnerException.Message, messageType.error);
            }
        });
    }
    return result;
}

编辑:我没有注意到我指的是Revit 2013 API参考,并且错过了2012年没有ApplicationInitialized事件。在这种情况下,您可以尝试连接其中一个DocumentOpeningIdling事件,这样就不会让应用程序已经初始化,但遗憾的是当用户即将做某事时,可能会让他发疯。

知道Idling事件是否在未打开文档的情况下触发将会很有趣 - 这可能会解决您的问题。你可以尝试一下并报告回来吗?