代码之家  ›  专栏  ›  技术社区  ›  eglasius

确定db4o备份何时完成

  •  0
  • eglasius  · 技术社区  · 14 年前

    我怎么知道db4o started from code 完成了吗?

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

    1 回复  |  直到 14 年前
        1
  •  3
  •   Gamlor Gabriele Ran    14 年前

    据我所知这是不可能的。当您尝试在备份准备就绪的情况下运行备份时,会出现BackupInProgressException。这样,您就知道备份正在进行中。

    然而,这并不是一个真正的通知,在很多情况下也不完整。

    然而,有一个复杂的工作。您可以为备份过程提供自己的存储实现:

    IStorage myStorage=。。。; 容器.Ext().备份(myStorage备份.db4o.bak“);

    这样,您就可以实现一个包装器存储来通知您。您将构建一个实现IStorage接口的装饰器。返回的IBin实例会在关闭时通知您。当备份在IBin实例上调用close方法时,您就知道它已经完成了。

    这是一份草案。(不是测试什么的)。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");