예제 #1
0
        /// <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);
        }
예제 #2
0
        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;
        }