前回の続きになります。
今回は設定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へリクエストを投げる?ことへ一歩踏み出したいと考えています。