/// <summary>
        /// コンストラクタ
        /// </summary>
        public MainWindowViewModel()
        {
            this.SaveMinutesCommand        = new DelegateCommand(SaveMinutes, CanSaveMinutes);
            this.StartInstantSaveCommand   = new DelegateCommand(StartInstantSave, CanStartInstantSave);
            this.ChangeToggleSwitchCommand = new DelegateCommand(ChangeToggleSwitch, CanChangeToggleSwitch);

            //m_MinutesModelのm_IsInstantSaveExecutingと双方向バインディングする
            m_IsInstantSaveExecuting = m_MinutesModel.ToReactivePropertyAsSynchronized(x => x.m_IsInstantSaveExecuting);
            //どのタイミングでCanExecute()がtrueになるかを設定(今回は常に実行可能にしとく)
            InstantSaveMinutesCommand = m_IsInstantSaveExecuting.Select(e => true).ToReactiveCommand();
            //実際のコマンドを登録(メッセンジャー経由でViewとViewModel間でやりとりできるようにする)
            InstantSaveMinutesCommand.Subscribe(
                _ => Messenger.Instance
                .GetEvent <PubSubEvent <bool> >().Publish(m_MinutesModel.InstantSaveContents()));
            //ChangeToggleSwitchCommand.Subscribe();

            m_SelectableTimeList = new List <string> {
                "07:00", "07:15", "07:30", "07:45", "08:00", "08:15", "08:30", "08:45",
                "09:00", "09:15", "09:30", "09:45", "10:00", "10:15", "10:30", "10:45",
                "11:00", "11:15", "11:30", "11:45", "12:00", "12:15", "12:30", "12:45",
                "13:00", "13:15", "13:30", "13:45", "14:00", "14:15", "14:30", "14:45",
                "15:00", "15:15", "15:30", "15:45", "16:00", "16:15", "16:30", "16:45",
                "16:00", "16:15", "16:30", "16:45", "17:00", "17:15", "17:30", "17:45",
                "18:00", "18:15", "18:30", "18:45", "19:00", "19:15", "19:30", "19:45",
                "20:00", "20:15", "20:30", "20:45", "21:00", "21:15", "21:30", "21:45",
            };
        }
 private void StartInstantSave()
 {
     if (m_MinutesModel.m_IsInstantSaveExecuting == false)
     {
         m_MinutesModel.m_IsInstantSaveExecuting = true;
         if (_TokenSource == null)
         {
             _TokenSource = new CancellationTokenSource();
         }
         _InstantSaveTask = Task.Factory.StartNew(() =>
         {
             while (m_MinutesModel.m_IsInstantSaveExecuting == true)
             {
                 try
                 {
                     // キャンセル要求がきていたらOperationCanceledException例外をスロー
                     _TokenSource.Token.ThrowIfCancellationRequested();
                 }
                 catch (OperationCanceledException)
                 {
                     break;
                 }
                 InstantSaveMinutesCommand.Execute();
                 //設定された時間だけスリープ(設定は秒でおこなってもらう)
                 Thread.Sleep(Properties.Settings.Default.InstantSaveTimeSpan * 1000);
             }
         }, _TokenSource.Token).ContinueWith(t =>
         {
             if (_TokenSource != null)
             {
                 _TokenSource.Dispose();
             }
             _TokenSource = null;
             if (t.IsCanceled)
             {
             }
         });
     }
     else
     {
         try
         {
             m_MinutesModel.m_IsInstantSaveExecuting = false;
             //キャンセル要求
             if (_TokenSource != null)
             {
                 _TokenSource.Cancel(true);
             }
             //スレッド終了待ち
             //_InstantSaveTask.Wait();
         }
         catch (OperationCanceledException oe)
         {
             //タスクキャンセル時に実行される
             Console.WriteLine("Instant Save Cancelled.");
         }
     }
 }