Visual Studio 加载项:我如何知道解决方案何时完成加载

发布于 2024-08-06 00:35:02 字数 480 浏览 6 评论 0原文

我正在编写一个 VS2008 加载项(使用 DTE),需要在当前解决方案加载完成后收到通知。

我尝试使用以下代码:

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

不幸的是,从 VS2005 开始,该事件似乎在解决方案开始加载时抛出,而不是在完成时抛出。

简短的互联网搜索产生了 以下线程解释了问题并提出了解决方案(检查每个项目项以查看其是否已完成加载)。

这是可用的最佳解决方案还是有更好的方法来知道解决方案何时完成加载?

I'm writing a VS2008 add-in (using DTE) that needs to be notified after the current solution has finished loading.

I've tried using the following code:

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

Unfortunately it seems that since VS2005 the event is thrown when the solution starts to load - and not when it finishes.

A short internet search produced the following thread that explains the problem and suggest a solution (check each project item to see if it finished loading).

Is this the best solution available or is there a better way to know when a solution has finished loading?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

素衣风尘叹 2024-08-13 00:35:03

我找到了解决此问题的解决方法 - 我创建了一个在主线程上运行的 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);
   }
}

I've found a workaround that solves this problem - I've created a Windows.Forms.Timer that runs on the main thread and checks if the solution has finished loading.

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);
   }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文