1

我有一个最初为 Petrel 2011 编写的插件。最近,我们需要将它与 Petrel 2012 一起使用。我已将调试器连接到 Petrel 并确认正在加载插件并且正在调用模块上的 Initialize()。这只是将事件处理程序添加到 DataManager.DataSourceManager.Saved 事件。

在 Petrel 2011 中,此事件在保存过程即将结束时触发。然而,到了 2012 年,这个事件似乎不再被触发。

我应该在 2012 年使用一个新事件来检测项目何时被保存?最好是与 2011 兼容的。

4

1 回答 1

2

好的,我在 2012 年的发行说明附录 A 中找到了答案:

“每次创建新工作区(创建新项目或加载新项目时)时,它都需要自己的 DataSourceManager。因此缓存 DataSourceManager 显然不再起作用,订阅 DataSourceManager.Saved 事件每次都应该完成项目已打开。最好的位置是在 DataManager.WorkspaceEvent.Opened 事件处理程序中。”

对我有用的解决方案是:

public void Initialize()
{
    DataManager.WorkspaceOpened += ProjectOpened;
}

private void ProjectOpened(object sender, EventArgs e)
{
    DataManager.DataSourceManager.Saved += DataSourceManagerSaved;
}

private void DataSourceManagerSaved(object sender, EventArgs e)
{
    whatever needs doing on save...
}
于 2013-06-04T13:36:23.273 回答