2013-03-20 4 views
1

은 첫째로 나는 등 영어 오타에 대해 사과 폐쇄하는 것은 내가 '확인이

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을 닫고 업데이트를 시작합니다.

문제는이 시점에서 Revit이 자체적으로로드를 완료하지 못했고 프로그래밍 방식으로 닫을 경우 5 초 후에 닫을 준비가되지 않았기 때문에 오류가 발생합니다.

System.Threading.Thread.Sleep(5000); 

는하지만 necesserily 사용자에 내 컴퓨터에서 문제를 해결겠습니까, 그래서에서 Revit이 (가 폐쇄 될 수 있도록 상태) 폐쇄 할 준비가되었는지 내가 확인하는 방법이 필요합니다.

그래서 질문입니다 : Revit을 닫을 수 있는지 확인하는 방법이 있습니까? 누구든지 이런 문제가 있었고 해결 했습니까?

은 (내가 ... 사용자가 REVIT을 닫지 만 그렇지 않은 이상적인 때 내가 업데이트를 확인할 수

어떤 아이디어를 알고

답변

3

당신이 할 수 있었던 ApplicationIntitialized 이벤트에 가입하려고? - 난 단지 가져 내기 REVIT가 완전히로드 될 때 해고

를 문서에서 :. 완전히 초기화로 REVIT이 initializat을 포함하여 출시 된 후 이벤트가 발생할

외부 응용 프로그램의 이온. 당신의 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 이벤트가 없습니다. 이 경우 DocumentOpening 또는 Idling 이벤트 중 하나에 연결하면 응용 프로그램이 에 초기화되지 않았지만이 초기화되지만 슬프게도 사용자가 막 시도하고있는 순간에 그를 미쳤다.

Idling 이벤트가 문서를 열지 않고 실행되는지 여부는 흥미로울 것입니다. 이로 인해 문제가 해결 될 수 있습니다. 그것을 밖으로 시도하고 다시보고 해 주시겠습니까?

+0

도움을 주셔서 감사합니다.이 답변을 표시했습니다. 문제의 해결 방법이 정말 멋지다 ... Revit API 2013을 사용하는 경우 :) 불행히도 2012 년을 지원해야합니다. 그래서 아직도 해결책을 찾아야 해 ... 고마워. :) – Pawel