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