Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Revit C“运行代码”;OnShutton“;及;“启动时”;_C#_Startup_Revit Api - Fatal编程技术网

C# Revit C“运行代码”;OnShutton“;及;“启动时”;

C# Revit C“运行代码”;OnShutton“;及;“启动时”;,c#,startup,revit-api,C#,Startup,Revit Api,“AIPAppStartup”的Revit SDK示例已为执行的“OnShutDown”(关闭Revit会话时)或“OnStartup”(启动Revit会话时)的代码预构建了部分,但我希望能够为加载的每个文档运行代码。具体而言,我希望Revit清除与加载的特定模型关联的临时文件 我试着创造一个新的结果, 公共Autodesk.Revit.UI.Result OnLoad(uicontrolLED应用程序),但此操作无效。我还尝试了另外两种****可能性(OnOpen等),但也失败了 是否有一个特

“AIPAppStartup”的Revit SDK示例已为执行的“OnShutDown”(关闭Revit会话时)或“OnStartup”(启动Revit会话时)的代码预构建了部分,但我希望能够为加载的每个文档运行代码。具体而言,我希望Revit清除与加载的特定模型关联的临时文件

我试着创造一个新的结果, 公共Autodesk.Revit.UI.Result OnLoad(uicontrolLED应用程序),但此操作无效。我还尝试了另外两种****可能性(OnOpen等),但也失败了


是否有一个特定的“On******”结果可用于实现我的愿望?

如果您希望它在模型打开后运行,则您要查找的事件是OnDocumentOpened;如果您希望它在模型打开前运行,则是OnDocumentOpening

您需要将事件处理程序添加到应用程序的OnStartup方法中:

public Result OnStartup(UIControlledApplication application)  {
     application.ControlledApplication.DocumentOpened += OnDocOpened;
     //Rest of your code here...
     return Result.Succeeded;
}

private void OnDocOpened(object sender, DocumentOpenedEventArgs args) {
    Autodesk.Revit.ApplicationServices.Application app = (Autodesk.Revit.ApplicationServices.Application)sender;
    Document doc = args.Document;
    //Your code here...
}
public Result OnShutdown(UIControlledApplication application) {
    application.ControlledApplication.DocumentOpened -= OnDocOpened;
    //Rest of your code here...
    return Result.Succeeded;
}
您还应该删除应用程序的OnShutdown方法中的事件处理程序:

public Result OnStartup(UIControlledApplication application)  {
     application.ControlledApplication.DocumentOpened += OnDocOpened;
     //Rest of your code here...
     return Result.Succeeded;
}

private void OnDocOpened(object sender, DocumentOpenedEventArgs args) {
    Autodesk.Revit.ApplicationServices.Application app = (Autodesk.Revit.ApplicationServices.Application)sender;
    Document doc = args.Document;
    //Your code here...
}
public Result OnShutdown(UIControlledApplication application) {
    application.ControlledApplication.DocumentOpened -= OnDocOpened;
    //Rest of your code here...
    return Result.Succeeded;
}

谢谢,这很有帮助。从OnShutdown中删除“DocumentOpen”的原因是什么?它是否在关机期间重新运行代码?我在测试时没有删除事件处理程序,也没有看到任何区别(我有一个TaskDialog会显示出来)。我无法告诉您确切的原因,但是,在Revit中使用事件处理程序的每个示例都包含在OnShutton方法中删除它们的代码。@KeachyPeen通常在发布者仍在触发事件但订阅者不再希望侦听的情况下,您希望删除事件处理程序。看见在这种情况下,这不是一个问题,因为当Revit打开时,您总是希望它能够侦听,而当它未打开时,您无法侦听。换句话说,一旦应用程序关闭,
OnDocOpened
无论如何都无法再次触发。