前回の続きになります。

 

今回は設定Formを作成し、設定した時間に通知をするという機能を作成してみます。

 

まずは簡易的な時間設定画面を作成しました。

DateTimePickerコントロールとButtonコントロールを配置した最低限の画面です。

ここで設定した時間に通知が表示されるようにします。

 

そしてボタンが押された時のイベントを以下のように作成します。

private void button1_Click(object sender, EventArgs e)
{
       Form1 form1 = (Form1)Owner;
       form1.Start(this.dateTimePicker1.Value); //Form1のStartというメソッドに設定された時間を渡す
}

 

Form1側のメソッドは以下です。
        public void Start(DateTime time)
        {
            //スレッドの開始
            thread = new Thread(new ParameterizedThreadStart(OnceNotify)); //スレッドの開始と同時に引数(時間)を渡す
            thread.Start(time);
        }

        //指定時間通知
        public void OnceNotify(Object obj)
        {
            DateTime time = (DateTime)obj; //引数を受け取る
            
            //設定完了通知
            notifyIcon1.BalloonTipTitle = "おしらせ";
            notifyIcon1.BalloonTipText = time.Hour.ToString() + "時" + time.Minute.ToString() + "分に通知を設定しました。";
            notifyIcon1.ShowBalloonTip(3000);

            TimeSpan ts = time - DateTime.Now;
            double i = ts.TotalMilliseconds;
            
            System.Threading.Thread.Sleep(ts);
            DateTime dt = DateTime.Now;
            notifyIcon1.BalloonTipTitle = "おしらせ";
            notifyIcon1.BalloonTipText = dt.Hour.ToString() + "時" + dt.Minute.ToString() + "分になりました。";
            notifyIcon1.ShowBalloonTip(3000);
        }
    }

 

 

これを実際に動かしてみると、

時間を設定しボタンを押すと、

 

設定が完了したことを通知で知らせます。

 

そして時間になると

時間になりましたという通知が再度表示されます。

 

時間は、開始した時間と設定した時間の差分を計算してSleepしているので、

精度はあまり高くないのかもしれませんが、とりあえず動きました。

 

この調子で少しずつ作成していければと思います。

 

次回はAPIへリクエストを投げる?ことへ一歩踏み出したいと考えています。