确定db4o备份何时完成

时间:2010-09-09 10:42:20

标签: c# .net db4o

我怎么知道db4o started from code何时完成?

Doc提到它在一个单独的线程中进行备份,但没有提到它何时完成。该方法不会收到任何回调。

1 个答案:

答案 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");