2014-05-14 5 views
0

"AIPAppStartup"용 Revit SDK 샘플에는 실행 된 "OnShutDown"(Revit 세션 종료시) 또는 "OnStartup"(Revit 세션 시작시) 코드에 대한 사전 작성 섹션이 있습니다. 하지만로드 된 각 문서에 대해 코드를 실행할 수 있어야합니다. 특히 Revit에로드 된 특정 모델과 관련된 임시 파일을 지우고 싶습니다.Revit C# 실행 코드 "OnShutDown"및 "OnStartup"

새로운 결과, 공개 Autodesk.Revit.UI.Result OnLoad (UIControlledApplication 응용 프로그램)를 만들려고했는데 작동하지 않았습니다. 나는 또한 실패한 다른 가능성을 OnOpen 등으로 시도했다.

내 "욕망"을 달성 할 수있는 특정 "On *****"결과가 있습니까?

답변

6

찾고있는 이벤트는 모델을 연 후에 실행하려는 경우 OnDocumentOpened이거나 모델이 열리기 전에 실행하려는 경우 OnDocumentOpening입니다. ,

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

감사한다 :

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... } 

또한 응용 프로그램의 OnShutdown 방법에 이벤트 처리기를 제거해야합니다 :

당신은 응용 프로그램의 OnStartup 방법으로 이벤트 처리기를 추가해야합니다 도움이되었다. OnShutdown에서 "DocumentOpened"를 제거한 이유는 무엇입니까? 종료하는 동안 코드를 다시 실행합니까? 테스트하는 동안 이벤트 처리기를 제거하지 않았으며 차이점을 보지 못했습니다 (표시된 TaskDialog가 있음). – KeachyPeen

+0

정확한 이유는 말할 수 없지만 Revit의 이벤트 핸들러를 사용하는 모든 예제에는 OnShutdown 메소드에서 이벤트 핸들러를 제거하는 코드가 포함되어 있습니다. –

+0

@KeachyPeen 일반적으로 게시자가 이벤트를 계속 트리거하고 있지만 구독자가 더 이상 듣고 싶지 않은 경우 이벤트 처리기를 제거하려고합니다. [이 질문에 대한 Jon Skeet의 답변] (http://stackoverflow.com/questions/506092/is-it-necessary-to-explicitly-remove-event-handlers-in-c-sharp)을 참조하십시오. 이 경우 Revit이 열려있는 동안 항상 듣고 싶을 때가 열려 있기 때문에 열려 있지 않을 때들을 수 없기 때문에 문제가되지 않습니다. 다시 말해 애플리케이션이 종료되면 OnDocOpened가 다시 트리거 될 수있는 방법이 없습니다. – skeletank