Надстройка Visual Studio:Как узнать, что решение завершило загрузку
-
19-09-2019 - |
Вопрос
Я пишу надстройку 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);
}
}