/// <summary> /// 次のタイマーイベントをセットする /// </summary> private bool SetNextTimerEvent() { // リストボックスに項目がなければ終了。 if (listBox1.Items.Count == 0) { textBlock1.Text = $"次の通知はありません"; return(false); } StopTimer(); // タイマのインスタンスを生成 timer1 = new DispatcherTimer(); // listBox1内のリストから次のスケジュールを検索 Schedules schedules = new Schedules(); schedules.mySchedules = new List <Schedule>(); foreach (Schedule s in listBox1.Items) { schedules.mySchedules.Add(s); } bool ret = schedules.getNextSchedule(ref nextSchedule); if (ret == false) { textBlock1.Text = $"次の通知はありません"; return(false); } // time1 にリマインド目標時刻を代入 DateTime dt = nextSchedule.Timer; TimeSpan st = new TimeSpan(dt.Hour, dt.Minute, dt.Second); var time1 = DateTime.Today + st - DateTime.Now; // 目標時刻を過ぎていれば次の日の同時刻にする if (time1 < TimeSpan.Zero) { time1 += new TimeSpan(24, 0, 0); } timer1.Interval = time1; // 時間になったらそこから 24 時間毎に Method1 を呼び出すようタイマーをセット timer1.Tick += new EventHandler(Method1); timer1.Start(); textBlock1.Text = $"次の通知は{nextSchedule.Timer.TimeOfDay.ToString()}です。"; return(true); }
public MainWindow() { if (isFirst == true) { // 初回起動時の処理 // MainWindowの二重起動防止 // 初回のみセマフォを生成 _pool = new System.Threading.Semaphore(1, 1, SemaphoreName, out createdNew); } if (_pool.WaitOne(0, false) == false) { // セマフォ取得済みの場合MainWindowを起動しない // 既存のMainWindowをアクティブにする currentWindow.WindowState = WindowState.Normal; currentWindow.Activate(); // NotifyIconWrapperに通知するため、二重起動発生フラグを立てる isDoubleBoot = true; return; } // 現在起動しているMainWindowのオブジェクトを保存 currentWindow = this; InitializeComponent(); // スケジュール情報を初期化 Schedules schedules = new Schedules(); schedules.mySchedules = new List <Schedule>(); // スケジュール情報をロード ReadFromFile(ref schedules); // 通知アイテムリスト(listBox1にスケジュール情報を格納) foreach (Schedule s in schedules.mySchedules) { listBox1.Items.Add(s); } // 直近のリマインド項目をタイマーセット SetNextTimerEvent(); // 起動時にこのウィンドウを開かないチェックボックスを確認 checkBox2.IsChecked = Properties.Settings.Default.firstBootWindow; if ((isFirst == true) && (checkBox2.IsChecked == true)) { Close(); } // 初回フラグを更新 isFirst = false; }