public ScreenshotModel()
        {
            var status = new Subject <string>().AddTo(Disposer);

            StatusMsg = status.AsObservable();

            SaveToSpecified
            .Select(_ => ScreenshotUtils.Take(SaveFolder.Value))
            .Do(OpenImageFile)
            .Select(_ => "スクリーンショットを取得しました。")
            .Catch(Observable.Return("スクリーンショットの取得に失敗しました。"))
            .Repeat()
            .Subscribe(status)
            .AddTo(Disposer);

            var result = new Subject <string>().AddTo(Disposer);

            DragAreaMouseMove
            .Where(e => e.Button.HasFlag(MouseButtons.Left))
            .Select(_ => ScreenshotUtils.Take(Path.GetTempPath()))
            .Do(f => CompleteSaveToTemp(f))
            .Catch(Observable.Return(""))
            .Repeat()
            .Subscribe(result)
            .AddTo(Disposer);

            result
            .Select(f => string.IsNullOrEmpty(f) ?
                    "スクリーンショットの取得に失敗しました。" : "スクリーンショットを取得しました。")
            .Subscribe(status)
            .AddTo(Disposer);

            result
            .Where(f => !string.IsNullOrEmpty(f))
            .Delay(TimeSpan.FromSeconds(5))
            .Do(File.Delete)
            .Repeat()
            .Subscribe()
            .AddTo(Disposer);

            OpenSaveFolder
            .Select(_ => SaveFolder.Value)
            .StartProcess()
            .Select(r => r ? "フォルダを開きました。" : "フォルダを開けませんでした。")
            .Subscribe(status)
            .AddTo(Disposer);
        }
        public RecordModel()
        {
            StartRecord = State.Select(s => s == ModelState.Ready).ToReactiveCommand();
            EndRecord   = State.Select(s => s == ModelState.Recording).ToReactiveCommand();
            State.OnNext(ModelState.Ready);

            StartRecord
            .ObserveOn(TaskPoolScheduler.Default)
            .SelectMany(_ => DoRecord())
            .CatchIgnore((Exception _) => Status.OnNext("録画に失敗しました。"))
            .Repeat()
            .Subscribe();

            OpenSaveFolder
            .Select(_ => SaveFolder.Value)
            .StartProcess()
            .Select(r => r ? "フォルダを開きました。" : "フォルダを開けませんでした。")
            .Subscribe(Status);
        }