我怎么知道db4o started from code何时完成?
Doc提到它在一个单独的线程中进行备份,但没有提到它何时完成。该方法不会收到任何回调。
答案 0 :(得分:3)
据我所知,这是不可能的=(。当你尝试运行备份时,一个已经在进行中,你会得到一个BackupInProgressException。这样你就知道已经有一个正在进行的备份。
然而,在许多情况下,这不是真正的通知,也不是完美的通知。
然而,这是一个复杂的解决方法。您可以为备份过程提供自己的存储实现:
IStorage myStorage = ...; container.Ext()。备份(myStorage,“backup.db4o.bak”);
这样您就可以实现一个通知您的包装器存储。您构建了一个实现IStorage接口的装饰器。返回的IBin实例然后在关闭时通知您。当备份调用IBin实例上的close-methon时,您知道它已完成。
这是一个草稿如何完成。 (不是testet或任何东西)。 StorageDecorator是IStorage-decorators的基类,它包含在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");