public IObservable <IEnumerable <Histogram> > AnalyzeAsync(SignalNotifier isCreating)
        {
            return(Observable.Start(() =>
            {
                isCreating.Increment();
                var ret = Analyzer.CreateHistogram();
                var ymax = ret.Max(x => x.Tally);
                if (ymax > 10)
                {
                    YAxisInterval = (int)(ymax / 10);
                }
                else
                {
                    // 小数点表示したくないので、Intervalの最小値は1
                    YAxisInterval = 1;
                }

                // グラフ表示に少し余裕を持たせたいので20%分余白をつくる。
                YAxisMaximum = ymax * 1.2;

                return ret;
            })
                   .Finally(() => isCreating.Decrement())
                   .Catch((Exception ex) => Messenger.Raise(new InformationMessage("データ解析に失敗しました。", "エラー", "ShowError"))));
        }
        /// <summary>
        /// 非同期でデータベースの検索を行う
        /// </summary>
        private IObservable <IEnumerable <RecordDescription> > SearchAsync(SignalNotifier isSearching)
        {
            isSearching.Increment(); // 検索中

            var condition = new SearchCondition()
            {
                DataType      = DataType,
                ComponentType = ComponentType,
                PortName      = PortName,
                StartDateTime = StartDate,
                EndDateTime   = EndDate
            };

            return(Observable.Start(() =>
            {
                //SearchResults.Clear();
                var ret = _recordDescriptionRepository.GetRecordDescriptions(condition);
                //isSearching.Decrement(); //検索完了
                return ret;
            })
                   .Finally(() => isSearching.Decrement())
                   .Catch((Exception ex) => Messenger.Raise(new InformationMessage("データベースアクセスに失敗しました。", "エラー", "ShowError"))));
        }
        public IObservable<IEnumerable<Histogram>> AnalyzeAsync(SignalNotifier isCreating)
        {
            return Observable.Start(() =>
            {
                isCreating.Increment();
                var ret = Analyzer.CreateHistogram();
                var ymax = ret.Max(x => x.Tally);
                if (ymax > 10)
                {
                    YAxisInterval = (int)(ymax/10);
                }
                else
                {
                    // 小数点表示したくないので、Intervalの最小値は1
                    YAxisInterval = 1;
                }

                // グラフ表示に少し余裕を持たせたいので20%分余白をつくる。
                YAxisMaximum = ymax * 1.2;

                return ret;
            })
            .Finally(() => isCreating.Decrement())
            .Catch((Exception ex) => Messenger.Raise(new InformationMessage("データ解析に失敗しました。", "エラー", "ShowError")));
        }
        /// <summary>
        /// 非同期でデータベースの検索を行う
        /// </summary>
        private IObservable<IEnumerable<RecordDescription>> SearchAsync(SignalNotifier isSearching)
        {
            isSearching.Increment(); // 検索中

            var condition = new SearchCondition()
            {
                DataType = DataType,
                ComponentType = ComponentType,
                PortName = PortName,
                StartDateTime = StartDate,
                EndDateTime = EndDate
            };

            return Observable.Start(() =>
            {
                //SearchResults.Clear();
                var ret = _recordDescriptionRepository.GetRecordDescriptions(condition);
                //isSearching.Decrement(); //検索完了
                return ret;
            })
            .Finally(() => isSearching.Decrement())
            .Catch((Exception ex) => Messenger.Raise(new InformationMessage("データベースアクセスに失敗しました。", "エラー", "ShowError")));
        }