【问题标题】:MultiThread on For Loop C#For循环C#上的多线程
【发布时间】:2015-01-30 03:47:11
【问题描述】:

我正在制作一个程序来检查我公司服务器的状态。 我的服务器信息将加载到 DgvServer 我使用 for 循环来检查服务器的状态:

    private void btnCheck_Click(object sender, EventArgs e)
    {
        try
        {
            string ip = "";
            Ping ping = new System.Net.NetworkInformation.Ping();
            PingReply pingreplay = null;
            for (int i = 0; i < dgvServer.Rows.Count; i++)
            {
                //Get IP address
                ip = dgvServer.Rows[i].Cells[1].Value.ToString();
                pingreplay = ping.Send(ip,10000);
                if (pingreplay.Status == IPStatus.Success)
                {
                    //update status of server
                    dgvServer.Rows[i].Cells[4].Value = "Online";
                }
                else
                   //Update status of server
                    dgvServer.Rows[i].Cells[4].Value = "Offline";
            }
        }
        catch(Exception ex)
            {
                MessageBox.show(ex.Message);
            }
    }

如果所有服务器都在线就可以,但是如果某些服务器离线,则此代码需要很长时间才能完成。所以,我想为每个循环使用一个线程来检查每个服务器的状态。我不使用并行,因为这是 .net 2.0 程序。 请给我一些建议以使用线程改进此代码。 非常感谢!

【问题讨论】:

    标签: c# multithreading .net-2.0


    【解决方案1】:

    这是 Parallel.For 的绝妙实现,可与 .NET 2.0 配合使用

    在本文中,我们将看到一种在 C#2.0 中实现具有相同行为的静态 For 方法的方法。

    https://dotnetgalactics.wordpress.com/2009/11/19/how-to-provide-a-parallel-for-loop-in-c2-0-2/

    您可以使用文章中提供的方法使用 Parallel.For 循环来并行轮询所有服务器。

    请注意,只要最长的单个服务器检查时间,这仍然会阻止 UI。

    另一个需要考虑的选项是将该代码块放入BackgroundWorker,这样 UI 就不会被阻塞。

    BackgroundWorker 类允许您在单独的专用线程上运行操作。下载和数据库事务等耗时的操作可能会导致您的用户界面 (UI) 在运行时似乎停止响应。当您需要响应式 UI 并且面临与此类操作相关的长时间延迟时,BackgroundWorker 类提供了一种方便的解决方案。

    您可以为每台服务器创建一个 BackgroundWorker 以进行更新,以便在收到回复后立即在网格中更新每个服务器的状态,或者您可以只创建一个 BackgroundWorker(可能使用上面的 Parallel.For 实现)。

    【讨论】:

      【解决方案2】:

      尝试 Parallel.For 或 Parallel.Foreach。

      查看此链接了解更多信息https://msdn.microsoft.com/en-us/library/dd460713(v=vs.110).aspx

      【讨论】:

      • 他使用的是 .NET 2.0,因此他无法通过 .NET 使用此功能。
      猜你喜欢
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      • 1970-01-01
      • 2011-08-20
      • 2011-02-13
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多