Когда ваш Source
объект инициализирован, он начинается с LastParseTime
из Int32.MaxValue
. Код, вызывающий срабатывание ParseRequest
с ParseReason.Check
, проверяет значение LastParseTime
, чтобы узнать, меньше ли время с момента последнего изменения текста, чем время, необходимое для выполнения анализа (или настройки CodeSenseDelay
в зависимости от того, что больше).
Код, который обрабатывает ответ от ParseSource
, должен устанавливать LastParseTime
, но, насколько я могу судить, он делает это, только если ParseReason
равен Check
.
Вы можете обойти эту проблему, установив Source.LastParseTime = 0
при инициализации Source
. Это имеет побочный эффект установки CompletedFirstParse
в true
, даже если первый анализ еще не закончен.
Еще один способ решить эту проблему - переопределить Source.OnIdle
, чтобы отключить первый вызов BeginParse()
. Так я бы порекомендовал.
public override void OnIdle(bool periodic)
{
// Once first "Check" parse completes, revert to base implementation
if (this.CompletedFirstParse)
{
base.OnIdle(periodic);
}
// Same as base implementation, except we don't check lastParseTime
else if (!periodic || this.LanguageService == null || this.LanguageService.LastActiveTextView == null || (this.IsCompletorActive) || (!this.IsDirty || this.LanguageService.IsParsing))
{
this.BeginParse();
}
}