2016-03-22 14 views
2

Windowsのアプリケーションで通知を自動的に表示する方法を知りたいのですが。ここwinformsの通知

私のコード:

cn.Open(); 
SqlCommand cmd = new SqlCommand("select Count(*) from Issue where Return_Date < @Date", cn); 
cmd.Parameters.AddWithValue("@Date",DateTime.Now); 
int NumberOfOverdue = (int)cmd.ExecuteScalar(); 
cn.Close(); 

if (NumberOfOverdue > 0) 
{ 
    notifyIcon1.ShowBalloonTip(500, "Library Management System", "There are " + NumberOfOverdue + " overdued book", ToolTipIcon.Warning); 
} 

コードが int型に配置され、私はプログラムを起動した後、明らかにそれが唯一のトリガー。 if条件の要件が自動的に満たされた直後に通知を表示する必要があります。

+0

通知を必要とするにはどうすればよい次に、あなたがすべきあなたの状態をチェックし、通知を表示する[Timer](https://msdn.microsoft.com/en-us/library/system.timers.timer(v = vs.110).aspx)のようなものを使用してください – Pikoh

+0

"私は後にトリガするプログラムを始める "あなたがここで何を言おうとしているのか分からない。もちろん、Form_Loadが実行される前にプログラムを起動する必要があります。 – Zack

+0

明確ではありません。いつあなたはそれが上がって欲しいですか?プログラムがロードされた後にそれを表示しないようにしてください。実際にはキーを押す必要はありません。 – ehh

答えて

2

ジェームズのDevで言及SqlDepencyクラスは良い方法ですが、あなたは、単にこのようTimerを使用することができます。

public partial class Form1 : Form 
{ 
    private Timer _timer; 
    private string _connectionString; // set this to your connection string 
    public Form1() 
    { 
     InitializeComponent(); 
     _timer = new Timer() 
     { 
      Enabled = true, 
      Interval = 2000 // interval in milliseconds 
     }; 

     _timer.Tick += _timer_Tick; 
    } 

    private void _timer_Tick(object sender, EventArgs e) 
    { 
     using(SqlConnection cn = new SqlConnection(_connectionString)) 
     { 
      cn.Open(); 
      using(
       SqlCommand cmd = 
        new SqlCommand("select Count(*) from Issue where Return_Date < @Date", cn)) 
      { 
       cmd.Parameters.AddWithValue("@Date", DateTime.Now); 
       int NumberOfOverdue = (int)cmd.ExecuteScalar(); 

       if (NumberOfOverdue > 0) 
       { 
        notifyIcon1.ShowBalloonTip(500, "Library Management System", 
               "There are " + NumberOfOverdue + " overdued book", 
               ToolTipIcon.Warning); 
       } 
      } 
     } 
    } 
} 

TimerはそのTickイベント(approximatly)ごとに2を発生させます秒(Intervalプロパティをミリ秒単位で設定して時刻を選択できます)。イベントハンドラ_timer_Tickでは、SQLリクエストを実行し、必要に応じて通知を表示することができます。

オブジェクトを手動で閉じる/処分する代わりに、usingステートメントを使用するためにコードを少し変更しました。

賢くIntervalを選択してください:

  • はすぐあなたが
  • 交通/データベースの負荷がこの要求によって生成されるどのくらいネットワーク