Дубликат первой записи на панели навигации в пользовательской языковой службе Visual Studio - PullRequest
0 голосов
/ 27 октября 2011

Я реализую языковую службу Visual Studio для пользовательского языка сценариев, который используется внутри моей компании, и я столкнулся с проблемой с панелью навигации, реализованной как подкласс TypeAndMemberDropdownBars . Подкласс создается моим подклассом LanguageService LanguageService.CreateDropDownHelper .

В методе OnSynchronizeDropdowns я перебираю типы, определенные в файле, и добавляю DropDownMembers к переданному массиву для заполнения панели навигации. Проблема, которую я вижу, заключается в том, что первый элемент в массиве дублируется и помещается в конец списка с помощью кода, к которому у меня нет доступа. Этот дополнительный элемент не работает правильно при выборе (ничего не происходит), но, похоже, не вызывает никаких других проблем; остальные элементы в списке работают нормально. Кроме того, похоже, что это происходит только с раскрывающимся списком типов - раскрывающийся список членов не отображает это поведение.

Я надеюсь, что кто-то еще видел и решил эту проблему и мог бы оказать некоторую помощь. Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 января 2013

Лучшим решением является реализация обратного вызова LanguageService.OnParseComplete и вызова оттуда SynchronizeDropdowns .OnParseComplete всегда вызывается из основного потока, поэтому это предотвращает возникновение проблем с синхронизацией, а также не позволяет отслеживать необходимость вызова SynchronizeDropdowns ().

0 голосов
/ 28 октября 2011

Оказывается, это вызвано тем, что я вызвал LanguageService.SynchronizeDropdowns из моего LanguageService.ParseSource метода, который вызывался в фоновом потоке.Я исправил эту проблему, установив флаг, когда ParseSource выполняет анализ, и затем реализовал проверку этого флага в моей функции LanguageService.OnIdle , которая будет вызывать SynchronizeDropdowns.Теперь он работает как положено!

...