Когда ваш объект 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();
}
}
Удачи вам в этом? – ColinCren