使用ManualResetEvent在foreach中定时器

时间:2015-07-05 14:27:35

标签: c# foreach timer manualresetevent

当我单击按钮时,循环开始读取数据库并将查询的每一行发送到另一台服务器。得到回应 - 循环继续。

代码实现如下

private ManualResetEvent _mre = new ManualResetEvent(true);

Thread startUpload = new Thread(() =>
{
   //read database

   foreach (DataRow dr in dt.Rows)
      {

         //send request

         _mre.WaitOne();
      }
});

startUpload.Start();

问题在于发送请求时可能不是答案。在我的情况下这是正常的。但如果没有,答案就会出现,那么周期就会停止。我需要在循环计时器内部进行,在由于缺乏响应而停止循环的情况下,将在30秒内继续循环。

计时器必须

_mre.Set();

1 个答案:

答案 0 :(得分:2)

重要提示:您将ManualResetEvent初始状态设置为true,如果您愿意停止当前进程并等待,请将其设置为false对于信号。

修改

实施例

private ManualResetEvent _mre = new ManualResetEvent(false);

private void ReadTheDatabase()
{
    Thread startUpload = new Thread(() =>
    {
        // Read the data

        foreach (DataRow dr in dt.Rows)
        {
            // Send request
            Thread requestMethod = new Thread(() =>
            {
                // Imitate process with thread sleep
                Thread.Sleep(5000);
                _mre.Set();
            });

            requestMethod.Start();

            _mre.WaitOne(30000, false);
        }
    });

    startUpload.Start();
}