2016-06-02 10 views
-9

毎秒、リアルタイムデータを毎秒ローカルデータベースに追加したいのですが、唯一の方法はタイマーですが、どこで宣言できるのか分かりません。毎秒リピート機能

備考:cnはSQL接続である

private void button2_Click(object sender, EventArgs e) 
{ 
    cn.Open(); 

    try 
    { 
     MySqlCommand cmd = new MySqlCommand("insert into supervision values("...........')", cn); 
     /
     cmd.ExecuteNonQuery(); 
    } 
    catch (MySqlException ex) 
    { 
     if (ex.Number == 2627) 
     { 
      MySqlCommand cmd2 = new MySqlCommand("insert into supervision values(" +.......')", cn); 

      cmd2.ExecuteNonQuery(); 
     } 
    } 
    cn.Close(); 
    MessageBox.Show("database added"); 
} 
+1

この質問を書くために全力を尽くしましたか? – eeerahul

+0

私たちが.NETアプリケーションについて話すならば、 "realtime"という用語を使用しないことをお勧めします。リアルタイムは非常に具体的な意味を持つ用語です。すべてが正確に発生すると予想されるときにすべて発生し、そうでなければシステムは安全なエラー状態になります。 PLCはリアルタイムであり、.NETは本質的にリアルタイムではありません。私は "間隔でポーリング"を使用することをお勧めします。 – Fritz

答えて

1

1-利用System.Timers.Timer

2-セットInterval 1〜第

3- Elapsedイベント

4- lockを使用してスレッドを安全にする方法。これにより、同時に2つのタイマーがデータベースに挿入されることはありません。

var mytimer = new System.Timers.Timer(1000); 
mytimer.Elapsed += Mytimer_Elapsed; 
mytimer.Start(); 

private static object lockobject = new object(); 
private static void Mytimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    lock(lockobject) 
    { 
     cn.Open(); 

     try 
     { 
      MySqlCommand cmd = new MySqlCommand("insert into supervision values("...........')", cn); 
      /
      cmd.ExecuteNonQuery(); 
     } 
     catch (MySqlException ex) 
     { 
      if (ex.Number == 2627) 
      { 
       MySqlCommand cmd2 = new MySqlCommand("insert into supervision values(" +.......')", cn); 


       cmd2.ExecuteNonQuery(); 
      } 
     } 
     cn.Close(); 
     MessageBox.Show("database added"); 
    } 
} 
0

コードを関数に配置します。次に、intwrvalを1000に設定してタイマー内から関数を呼び出します。