private void Init()
        {
            {
                this.Info = new ReactiveProperty <CheckBlocksProgressReport>().AddTo(_disposable);

                this.CloseCommand = new ReactiveCommand().AddTo(_disposable);
                this.CloseCommand.Subscribe(() => this.Close()).AddTo(_disposable);
            }

            {
                string configPath = System.IO.Path.Combine(AmoebaEnvironment.Paths.ConfigDirectoryPath, "View", nameof(CheckBlocksWindow));
                if (!Directory.Exists(configPath))
                {
                    Directory.CreateDirectory(configPath);
                }

                _settings = new Settings(configPath);
                int version = _settings.Load("Version", () => 0);

                this.DynamicOptions.SetProperties(_settings.Load(nameof(this.DynamicOptions), () => Array.Empty <DynamicOptions.DynamicPropertyInfo>()));
            }

            {
                EventHooks.Instance.SaveEvent += this.Save;
            }

            {
                var progress = new Action <CheckBlocksProgressReport>(report =>
                {
                    try
                    {
                        App.Current.Dispatcher.InvokeAsync(() =>
                        {
                            this.Info.Value = report;
                        });
                    }
                    catch (Exception)
                    {
                    }
                });

                _tokenSource = new CancellationTokenSource();
                _task        = _amoebaInterfaceManager.CheckBlocks(progress, _tokenSource.Token);
            }
        }