Надстройка Visual Studio:Как узнать, что решение завершило загрузку

StackOverflow https://stackoverflow.com/questions/1496809

Вопрос

Я пишу надстройку VS2008 (с использованием DTE), которую необходимо уведомить после завершения загрузки текущего решения.

Я пробовал использовать следующий код:

events = (Events2) applicationObject.Events
events.SolutionEvents.Opened += DoSomeWorkEvent;

К сожалению, похоже, что начиная с VS2005 событие генерируется, когда решение начинает загружаться, а не когда оно завершается.

Короткий поиск в Интернете дал следующая тема это объясняет проблему и предлагает решение (проверьте каждый элемент проекта, чтобы убедиться, что он завершил загрузку).

Является ли это лучшим доступным решением или есть лучший способ узнать, когда решение завершило загрузку?

Это было полезно?

Решение

Я нашел обходной путь, который решает эту проблему: я создал Windows.Forms.Timer, который запускается в основном потоке и проверяет, завершилась ли загрузка решения.

private void TimerTick(object sender, EventArgs e)
{
   try
   {
       var solution = applicationObject.Solution;
       if (solution.IsOpen && string.IsNullOrEmpty(solution.FileName) == false)
       {
           timer.Stop();
           // insert logic here
       }
   }
   catch (Exception exception)
   {
       Console.WriteLine(exception);
   }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top