0

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

代码实现如下

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();
4

1 回答 1

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();
}
于 2015-07-05T14:58:36.127 回答