Кажется, что событие 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...
}
Другие вопросы по тегам