2

我目前正在将 VS2010 扩展移植到 VS2012,并且我已经看到在加载我的解决方案时IVsSolutionEvents.OnAfterOpenProject(IVsHierarchy pHierarchy, int fAdded)调用了回调。fAdded == 1我相信这一定是由于VS2012中项目的异步加载。VS2010 不会发生这种情况。

我的问题是我怎么知道OnAfterOpenProject它是从异步项目加载过程中调用的?

4

2 回答 2

1

请查看 Microsoft VSX 论坛的以下链接:http: //social.msdn.microsoft.com/Forums/br/vsx/thread/2d38f312-e566-4f65-bf2a-92041c51d7cc

于 2013-03-01T15:56:57.340 回答
0

(虽然迟到了)从这里IVsSolutionEvents.OnAfterOpenProject的 MSDN参考资料来看,行为似乎是正确的,文档解释说(至少到现在为止):

f添加

类型:System.Int32

[在]如果在打开解决方案后将项目添加到解决方案中,则为true 。如果在打开解决方案时将项目添加到解决方案,则返回false 。

从您的报告来看,似乎false(解决方案仍在加载)映射到1,所以我猜true将映射到0。这在某种程度上与中的定义一致VSConstants

public const int S_FALSE = 1;
public const int S_OK = 0;

最后,在您的OnAfterOpenProject实现中,您可以根据该fAdded输入的值过滤调用:如果使用1调用,则意味着解决方案仍在(异步)加载,否则意味着新项目已添加到(已加载)解决方案.

于 2016-01-03T15:58:57.637 回答