Revit中同步事件

问题描述 投票:0回答:1

这... ... https://github.com/jeremytammik/RevitLookup/blob/master/CS/EventTrack/Events/ApplicationEvents.cs开始

我想添加一个事件监听器同步事件。下面的代码抛出一个错误,指出M_APP为空。我不能同意这个事件而Revit中正在启动?

我能够与application.ViewActivated += ....之前做到这一点。我想知道,如果这事做与DB VS UI驱动的事件,当他们被允许订阅?我只是不知道。

  namespace RevitModelHealth
{
    public class checkHealth : IExternalApplication
    {
        // Document doc;
        static public Autodesk.Revit.ApplicationServices.Application m_app = null;

        public Result OnShutdown(UIControlledApplication application)
        {
            return Result.Succeeded;
        }

        public Result OnStartup(UIControlledApplication application)
        {

            m_app.DocumentSynchronizingWithCentral += new EventHandler<DocumentSynchronizingWithCentralEventArgs>(m_app_DocumentSavingToCentral);
            return Result.Succeeded;
        }

        void m_app_DocumentSavingToCentral(object sender, Autodesk.Revit.DB.Events.DocumentSynchronizingWithCentralEventArgs e)
        {
            MessageBox.Show("asd","asd");
        }

    }
}

以下是更新后的代码反映我的第一应答反应。加载文档时打开消息框。不会引发任何错误,当我尝试初始化同步事件处理程序,但是没有后,消息框或前一同步事件之后开放。

  public class checkHealth : IExternalApplication
    {
        // Document doc;
        static public Autodesk.Revit.ApplicationServices.Application m_app;


        public Result OnShutdown(UIControlledApplication application)
        {
            return Result.Succeeded;
        }

        public Result OnStartup(UIControlledApplication application)
        {
            application.ControlledApplication.DocumentOpened += new EventHandler<DocumentOpenedEventArgs>(app_DocOpened);
            return Result.Succeeded;
        }

        public void app_DocOpened(object sender, DocumentOpenedEventArgs args)
        {
            MessageBox.Show("asd","asd");

            m_app.DocumentSynchronizingWithCentral += new EventHandler<DocumentSynchronizingWithCentralEventArgs>(m_app_DocumentSavingToCentral);
            m_app.DocumentSynchronizedWithCentral += new EventHandler<Autodesk.Revit.DB.Events.DocumentSynchronizedWithCentralEventArgs>(m_app_DocumentSavedToCentral);
        }

        void m_app_DocumentSavingToCentral(object sender, Autodesk.Revit.DB.Events.DocumentSynchronizingWithCentralEventArgs e)
        {
            MessageBox.Show("sync", "sync");
        }

        void m_app_DocumentSavedToCentral(object sender, Autodesk.Revit.DB.Events.DocumentSynchronizedWithCentralEventArgs e)
        {
            MessageBox.Show("Doone", "Done");
        }
    }

这个工作....这主要归功于部分的SDK示例项目EventsMonitor

namespace RevitModelHealth
{
    public class checkHealth : IExternalApplication
    {


        public Result OnShutdown(UIControlledApplication application)
        {
            return Result.Succeeded;
        }

        public Result OnStartup(UIControlledApplication application)
        {
            application.ControlledApplication.DocumentSynchronizingWithCentral += new EventHandler<DocumentSynchronizingWithCentralEventArgs>(app_syncStart);
            application.ControlledApplication.DocumentSynchronizedWithCentral += new EventHandler<DocumentSynchronizedWithCentralEventArgs>(app_syncOver);
            return Result.Succeeded;
        }

        public void app_syncStart(object o ,DocumentSynchronizingWithCentralEventArgs args)
        {
            MessageBox.Show("","Stasrting");
        }

        public void app_syncOver(object o,DocumentSynchronizedWithCentralEventArgs args)
        {
            MessageBox.Show("", "Over");
        }

    }

}
api synchronization revit
1个回答
0
投票

尝试

application.ControlledApplication.DocumentSynchronizingWithCentral += new EventHandler<DocumentSynchronizingWithCentralEventArgs>(m_app_DocumentSavingToCentral)

在OnStartup()方法。

该呼叫失败,因为实例成员M_APP被初始化为null。

这提高了UIApplication.ControlledApplicationDocumentSynchronizingWithCentralEventArgs对象正在从参数OnStartup访问。

© www.soinside.com 2019 - 2024. All rights reserved.