2009-09-30 3 views
3

Я пишу надстройку VS2008 (используя DTE), которая должна быть уведомлена после того, как текущее решение завершило загрузку.Visual Studio Add-In: Как узнать, когда решение закончило загрузку

Я попытался, используя следующий код:

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

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

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

Это лучшее решение, доступное или есть лучший способ узнать, когда решение закончило загрузку?

ответ

4

Я нашел обходное решение, которое решает эту проблему. Я создал 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); 
    } 
}