2009-08-01 8 views
1

활성 문서에서 네이티브 개체를 추가, 제거 및 편집 할 때 추적해야하는 프로그램을위한 플러그인을 작성하고 있습니다. API에는 문서를 편집 할 때 발생하는 이벤트가 있습니다. 그러나 프로그램은 네이티브 개체가 실제로 변경되는 시점을 추적하지 않습니다. 대신 변경되는 객체는 삭제되는 객체로 취급 된 다음 동일한 ID를 가진 다른 수정 된 객체로 즉시 대체됩니다. 이렇게하면 프로그램에서 실행 취소 레코드를 추적 할 수 있습니다.여러 이벤트가 발생했을 때 어떻게 추적합니까?

개체가 추가된다 : OnAddObject 이벤트

객체가 제거된다 : OnDeleteObject 이벤트

일부는 다음과 같이 내가 이벤트가 유발되는 것으로 확인되었습니다 실험 후

개체가 변경되었습니다. OnReplaceObject 이벤트 -> OnDeleteObject 이벤트 -> OnAddObject 이벤트

지금 내 플러그인은 내 맞춤 개체의 인스턴스를 컬렉션에 추가하거나 제거하는 OnAdd 및 OnDelete 이벤트 만보고 있습니다. 그러나 이것은 또한 객체가 내 플러그인을 바꿀 때마다 거의 동일한 객체를 다시 초기화하는 것을 제거한다는 것을 의미합니다. 차라리 그냥 문서 개체가 변경되어서 내 사용자 지정 개체를 완전히 다시 인스턴스화하지 않고 새로 고칠 수 있다는 것을 알고 싶습니다.

OnDelete 및 OnAdd 이벤트에 가입 된 내 메서드는 개체가 실제로 추가 또는 삭제되지 않고 변경 되었기 때문에 교체되는 것을 어떻게 알 수 있습니까?

답변

0

I 도입 "잠금"변수 (예를 bools) 제안

교체 이벤트 발생이 라이트 박스에서

를 잠그고 잠금 제거 된 변수를 확인하도록 설정. 잠금 설정이되어 있으면 잠금 해제 및 복귀로 설정하십시오.

+0

대체 이벤트 전에 추가/제거 이벤트가 발생하기 때문에이 작업을 수행 할 수 없습니다. – Zyphrax

+0

Eric의 질문에 따르면 Replace 이벤트가 발생하고 Delete가 이어지고 Add가 추가되므로 Johannes 솔루션은 스레딩 문제를 고려해야합니다. –

+0

이 대답은 내 솔루션에 가장 가깝습니다. ALTERTAL BOOL 변수를 사용하지 않고 오히려 OnReplaceObject 이벤트에서 객체의 ID를 캐시했습니다. –

0

문서 ID를 추적하십시오.

0

원래 프로그램의 잘못된 이벤트 구조로 인해 다소 어려웠습니다. 아마도 당신은 현재 시간과 함께 사전에 제거되는 항목의 ID를 넣을 수 있습니다.

그런 식으로 사전의 내용을 검사하는 별도의 스레드를 만들 수 있습니다 (항목이있을 때). 추가 이벤트가 시작될 때마다 각 항목에 몇 밀리 초 (dict의 DateTime 비교)를주고 일반 삭제 또는 바꾸기 여부를 결정하십시오.

몇 밀리 초 동안 삭제 속도를 늦춰야하기 때문에 약간 비효율적입니다. 그러나 나는 더 나은 방법을 생각할 수 없다.

+0

복잡한 방법 –

관련 문제