2016-03-22 4 views
2

Ich möchte wissen, wie ich Benachrichtigungen in den Windows Form-Anwendungen automatisch anzeigen kann.Benachrichtigungen in winforms

mein Code hier:

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); 
} 

Der Code int die befindet und offensichtlich löst es erst, nachdem ich das Programm starten; aber ich möchte, dass die Benachrichtigung angezeigt wird, sobald die Anforderung in der if-Bedingung automatisch erfüllt wird.

+0

Dann sollten Sie Verwenden Sie etwas wie ein [Timer] (https://msdn.microsoft.com/en-us/library/system.timers.timer (v = vs.110) .aspx), die Ihre Bedingung überprüfen und die Benachrichtigung – Pikoh

+0

zeigt " löst nur nach I aus starte das Programm "Ich verstehe nicht, was du hier sagen willst. Natürlich müssen Sie das Programm starten, bevor Form_Load ausgeführt wird ... – Zack

+0

Nicht klar. Wann willst du es ??? Warum es nicht nach dem geladenen Programm angezeigt wird, es ist in der Tat der Ort, an dem Sie keine Taste drücken müssen – ehh

Antwort

2

Während die SqlDepency Klasse erwähnt von James Dev ein guter Weg ist, können Sie auch einfach eine Timer wie folgt verwenden:

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); 
       } 
      } 
     } 
    } 
} 

Die Timer wirft seine Tick Ereignis (approximatly) alle 2 Sekunden (Sie können die Zeit auswählen, indem Sie die Eigenschaft Interval in Millisekunden festlegen). Im Ereignishandler _timer_Tick können Sie Ihre SQL-Anfrage ausführen und die Benachrichtigung bei Bedarf anzeigen.

Ich habe Ihren Code ein wenig geändert, um using Anweisungen zu verwenden, anstatt die Objekte manuell zu schließen/zu entsorgen.

Seien Sie sicher, dass die Interval mit Bedacht wählen:

  • Wie sofort Sie die Benachrichtigung
  • Wie viel Netzwerkverkehr/Datenbank Belastung durch diese Anforderung benötigen
  • erzeugt wird