Кажется, что событие DataManager.DataSourceManager.Saved не срабатывает при сохранении для Petrel 2012.1.
У меня есть плагин, изначально написанный для Petrel 2011. Недавно нам нужно было использовать его с Petrel 2012. Я подключил отладчик к Petrel и подтвердил, что плагин загружается и что вызывается Initialize() в модуле. Это просто добавляет обработчик события к событию DataManager.DataSourceManager.Saved.
В Petrel 2011 это событие запускается ближе к концу процесса сохранения. Тем не менее, с 2012 года это событие больше не похоже на увольнение.
Есть ли новое событие, которое я должен использовать в 2012 году, чтобы определить, когда проект сохраняется? Желательно один совместимый с 2011 года.
1 ответ
Хорошо, я нашел ответ на этот вопрос в примечаниях к выпуску 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...
}