Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定db4o备份何时完成_C#_.net_Db4o - Fatal编程技术网

C# 确定db4o备份何时完成

C# 确定db4o备份何时完成,c#,.net,db4o,C#,.net,Db4o,我如何知道db4o何时完成 Doc提到它在一个单独的线程中进行备份,但没有提到备份何时完成。该方法不接收任何回调。据我所知,这是不可能的=(。当您尝试在备份准备就绪的过程中运行备份时,您会得到一个BackupInProgressException。这样您就知道备份准备就绪了 然而,这不是一个真正的通知,在许多情况下也不是完整的 但是,这是一项复杂的工作。您可以为备份过程提供自己的存储实施: IStorage myStorage=。。。; container.Ext().Backup(myStor

我如何知道db4o何时完成


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

据我所知,这是不可能的=(。当您尝试在备份准备就绪的过程中运行备份时,您会得到一个BackupInProgressException。这样您就知道备份准备就绪了

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

但是,这是一项复杂的工作。您可以为备份过程提供自己的存储实施:

IStorage myStorage=。。。; container.Ext().Backup(myStorage,“Backup.db4o.bak”)

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

这是一个如何完成的草案(不是testet或任何东西)。StorageDecorator是iStorageDecorators的基类,包含在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");

据我所知,这是不可能的=(。当你试图运行一个正在进行的准备就绪的备份时,你会得到一个BackupInProgressException。这样你就知道有一个正在进行的准备就绪的备份

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

但是,这是一项复杂的工作。您可以为备份过程提供自己的存储实施:

IStorage myStorage=。。。; container.Ext().Backup(myStorage,“Backup.db4o.bak”)

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

这是一个如何完成的草案(不是testet或任何东西)。StorageDecorator是iStorageDecorators的基类,包含在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");

+1@Gamlor我觉得这是一项非常合理的工作。如果没有其他人提供,我一定会尝试这项工作。@eglasius您在这方面取得了成功吗?我们仍然有一个遗留系统,为了提高可靠性,我们还需要了解已完成的备份。很抱歉,但最后,我们再也没有回来尝试这项工作:(+1@Gamlor)我觉得这是一个非常合理的解决方案。如果没有其他人提供,我一定会试试这个。@eglasius你在这方面成功了吗?我们仍然有一个遗留系统,为了提高可靠性,我们还需要了解已完成的备份。很抱歉,但最后,我们再也没有回来尝试这个:(