2012-02-04 2 views
0

VS2010 패키지에서 캐럿 위치가 변경되면 FileCodeModel.CodeElements를 호출하는 코드 조각이 있습니다. 또한 문서에 바인딩 된 CodeModelEvents에 처리기를 등록했습니다.VS2010 FileCodeModel.CodeElements는 VB 프로젝트에서 COMException을 throw하지만 C# 프로젝트에서는 발생하지 않습니다.

패키지가 C# 프로젝트를 모니터링하면 제대로 작동합니다. 그러나 VB 프로젝트를 모니터링 할 때 FileCodeModel.CodeElements 호출은 E_FAIL 오류에 해당하는 COMException으로 실패합니다.

동작이 다른 이유는 무엇입니까?

+0

"약간 다른 방법"이 MSDN 페이지의 키입니다. http://msdn.microsoft.com/en-us/library/92aexfx5%28v=vs.100%29.aspx –

답변

2

C# 및 VB.net 코드 모델은 완전히 별개의 구현으로, 둘 다 연관된 단점이 있습니다.

VB.Net에서 캐럿 위치 변경은 IDE에서 행 커밋 논리를 트리거 할 수있는 더 큰 이벤트 집합의 일부입니다. 특히 버퍼가 더러운 경우에는이 이벤트에서 throw되는 것이 놀랍지 않습니다.

이 문제를 해결할 수있는 한 가지 방법은 캐럿 이동 후 Utl 이벤트를 기다리고 거기에 CodeElements이라는 쿼리를 보내는 것입니다.

+0

감사합니다. 어떻게 기다려야합니까? caret_changed 핸들러 실행 중 유휴 이벤트에 대해? 그것은 가능한가? 또한 해당 이벤트에 대해 어디에서 등록합니까? – Ismael

+1

@Ismael 아마도 가장 좋은 방법은'Dispatcher.CurrentDispatcher.BeginInvoke (DispatcherPriority.ApplicationIdle, callback))'호출을 수행하는 것입니다. – JaredPar

+0

감사합니다! – Ismael

관련 문제