Насколько я знаю, это невозможно = (. Когда вы пытаетесь выполнить резервное копирование, когда оно уже готово, вы получаете BackupInProgressException. Таким образом, вы знаете, что резервное копирование уже выполняется.
Однако это не является настоящим уведомлением и не является полезным во многих ситуациях.
Однако существует сложный обходной путь. Вы можете предоставить собственную реализацию хранилища для процесса резервного копирования:
IStorage myStorage = ...; container.Ext (). Backup (myStorage, "backup.db4o.bak");
Таким образом, вы можете реализовать обертку-хранилище, которая уведомляет вас.Декоратор, который реализует интерфейс IStorage. Возвращаемые экземпляры IBin затем уведомляют вас о закрытии. Когда резервная копия вызывает метод закрытия для экземпляра IBin, вы знаете, что это сделано.
Вотчерновик того, как это делается (не тест или что-то в этом роде). StorageDecorator - это базовый класс для декораторов IStorage, который включен в db4o.
class NotificationStorageDecorator : StorageDecorator
{
public NotificationStorageDecorator(IStorage storage) : base(storage)
{
}
public NotificationStorageDecorator() : this(new FileStorage()){}
protected override IBin Decorate(BinConfiguration config, IBin bin)
{
return new MyNotificationBin(bin);
}
class MyNotificationBin : BinDecorator
{
public MyNotificationBin(IBin bin) : base(bin)
{
}
public override void Close()
{
base.Close();
// Implement here your notification-mechanism
// For example with events etc
Console.Out.WriteLine("Backup-done");
}
}
}
// затем используйте его
var notifactionStorage = new NotificationStorageDecorator();
container.Ext().Backup(notifactionStorage,"backup.db4o.back");