2

启动一个新项目后,我想知道 Petrel 什么时候完成了新项目的创建。当订阅 DataManager.WorkspaceOpened 事件时,该事件会在工作区打开时被调用,但这可能不是在主线程完成创建新项目时。

关于何时知道 Petrel 何时完成创建新项目的任何想法?

4

1 回答 1

2

也许您可以尝试找到另一种方法来解决您的潜在问题,而不是监听项目事件?您是否可以进行惰性评估并等到用户真正需要您的代码来执行项目加载后将执行的操作?

有时你可能最终会在一个循环中追逐这类问题:我需要 A 发生在 B 之后,B 发生在 C 之后,C 发生在 A 之后。

无论如何......这是一个你可以在你的IModule中尝试的hack:

void WorkspaceOpened(object sender, EventArgs e)
{
    Application.Idle += new EventHandler(Application_Idle);
}

void Application_Idle(object sender, EventArgs e)
{
    // Deatach from this, since this event can be raised 100 times per second, 
    // and we only want it once per project.
    Application.Idle -= new EventHandler(Application_Idle);

    DoMyStuffHereAfterTheProjectHasFinishedOpening();
}
于 2012-06-14T08:23:18.540 回答