7
    string connectionstring = "server =SQLVS2\\SQLVS2;database=DDM;Persist Security Info=True;uid=ddmuser;password=User02+Ddm;";
    SqlConnection myConnection = new SqlConnection(connectionstring);
    SqlCommand myCommand = new SqlCommand("GetNullHash", myConnection);
    myCommand.CommandType = CommandType.StoredProcedure;
    myConnection.Open();
    SqlDataReader rdr = myCommand.ExecuteReader();

   while (rdr.Read())
    {
        string filename = @"\\" + rdr.GetString(3);
        filename = System.IO.Path.Combine(filename, rdr.GetString(2));
        filename = System.IO.Path.Combine(filename, rdr.GetString(1));
        computeHashh1 abc = new computeHashh1();
        Console.WriteLine(abc.computeHash(filename));          
        inserthash insert = new inserthash();
       insert.InsertHash(rdr.GetString(1), abc.computeHash(filename), rdr.GetStr(2),rdr.GetString(3));

    }

このループを 5 秒に 1 回、または停止するまで実行するにはどうすればよいですか。

4

4 に答える 4

18

最も簡単な方法は次のとおりです。

while (true) {
    // code here
    Thread.Sleep(5000);
}

ただし、より堅牢にするために、適切なタイマーを備えたWindows サービスをお勧めします。

于 2012-07-24T13:55:03.770 に答える
6

コードをラップしてタイマーオブジェクトを使用します。これにより、タイマー自体を制御できます(停止、開始など)。

System.Timers.Timer aTimer;
aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 2000;
aTimer.Enabled = true;

private void OnTimedEvent(object source, ElapsedEventArgs e)
{
    //your code
}

詳細はこちら

http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.100%29.aspx

于 2012-07-24T14:01:50.637 に答える
6

試す:

while(true) 
{
    try 
    {
       thread.sleep(5000) 
    } 
    catch(Exception e) 
    {
      //handle the exception 
    }
}

最も単純です。

于 2012-07-24T13:57:49.890 に答える
0

これを行うつもりであり、間隔の制約が正確ではなく、複数のタイマー イベントによってコードが再入力されることが決してないことを絶対に確認したかった場合、コードが間隔よりも長くかかることがあります。 sleep() ループを使用するだけで、単純な要件のように見えるものに複雑さを追加する無関係なタイマーなしで機能するようになります。

メッセージを処理しなければならない GUI スレッド (または開始/停止などを処理しなければならないメイン サービス スレッド) の外では、タイマーはしばしば不適切で扱いにくく、別のスレッド/プールがタイマー イベントを発生させなければならない場合、コンテキスト スイッチが無駄になります。

とにかく、Vista/W7 では、スリープ状態のスレッドを生成したサービスを停止しても問題ありません。サービス メイン スレッドが停止メッセージを処理したにもかかわらず、サービス プロセスがまだスレッドをブロックしていることを OS が認識するのに約 20 秒かかります。 .

于 2012-07-24T14:59:08.833 に答える