1

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

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

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

    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 时我可以检查更新,但这并不理想......

有任何想法吗?

4

1 回答 1

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事件是否在没有打开文档的情况下触发会很有趣 - 这可能会解决您的问题。你能尝试一下然后报告吗?

于 2013-03-21T13:05:15.997 回答