0

会社で内部的に使用されているカスタム スクリプト言語用に Visual Studio 言語サービスを実装していますが、TypeAndMemberDropdownBarsのサブクラスとして実装されたナビゲーション バーで問題が発生しました。サブクラスは、LanguageService サブクラスのLanguageService.CreateDropDownHelperメソッドによって作成されます。

OnSynchronizeDropdownsメソッドでは、ファイルで定義されている型を反復処理し、渡された配列にDropDownMembersを追加して、ナビゲーション バーを埋めています。私が見ている問題は、配列の最初の項目が複製され、アクセスできないコードによってリストの最後に配置されていることです。この余分な項目は、選択すると正しく動作しません (何も起こりません) が、他の問題は発生していないようです。リスト内の残りの項目は正常に機能します。さらに、これはタイプ ドロップダウン ボックスでのみ発生するようです。メンバー ドロップダウン ボックスでは、この動作は表示されません。

他の誰かがこの問題を見て解決し、何らかの支援を提供できることを願っています。ありがとう!

4

2 に答える 2

0

より良い解決策は、 LanguageService.OnParseCompleteコールバックを実装し、そこからSynchronizeDropdownsを呼び出すことです。OnParseCompleteは常にメインスレッドから呼び出されるため、同期の問題が発生するのを防ぎ、SynchronizeDropdowns()を呼び出す必要があるかどうかを追跡する必要もありません。

于 2013-01-15T08:46:13.577 に答える
0

これは、バックグラウンド スレッドで呼び出されていたLanguageService.ParseSourceメソッドからLanguageService.SynchronizeDropdownsを呼び出すことが原因であることが判明しました。ParseSource がチェック解析を行うときにフラグを設定し、 SynchronizeDropdowns を呼び出すLanguageService.OnIdle関数でそのフラグのチェックを実装することで、問題を修正しました。現在、期待どおりに動作しています。

于 2011-10-27T21:24:25.173 に答える