0

我正在为我公司内部使用的自定义脚本语言实现 Visual Studio 语言服务,我遇到了作为TypeAndMemberDropdownBars的子类实现的导航栏的问题。该子类由我的 LanguageService 子类的LanguageService.CreateDropDownHelper方法创建。

OnSynchronizeDropdowns方法中,我遍历文件中定义的类型并将DropDownMembers添加到传入的数组以填充导航栏。我看到的问题是数组中的第一项被复制并通过我无权访问的代码放置在列表的末尾。这个额外的项目在选择时行为不正确(没有任何反应),但似乎不会导致任何其他问题;列表中的其余项目工作正常。此外,这似乎只发生在类型下拉框 - 成员下拉框不显示此行为。

我希望其他人已经看到并解决了这个问题,并可以提供一些帮助。谢谢!

4

2 回答 2

0

原来这是由于我从我的LanguageService.ParseSource方法调用LanguageService.SynchronizeDropdowns引起的,该方法是在后台线程上调用的。我通过在 ParseSource 进行 Check 解析时设置一个标志来解决该问题,然后在我的LanguageService.OnIdle函数中实现对该标志的检查,该函数将调用 SynchronizeDropdowns。它现在按预期工作!

于 2011-10-27T21:24:25.173 回答
0

更好的解决方案是实现LanguageService.OnParseComplete回调,并从那里调用SynchronizeDropdowns 。OnParseComplete 总是从主线程调用,因此这可以防止出现任何同步问题,并且还可以让您不必跟踪是否需要调用 SynchronizeDropdowns()。

于 2013-01-15T08:46:13.577 回答