我正在开发一个网络监控应用程序,它可以对(未知)数量的主机执行 ping 操作。到目前为止,我有下面的代码。我创建了一个类 PingHost
并带有一个函数 zping
并且我在定时器的帮助下每 2 秒调用它一次让 2 次 ping 完成,即使一个其中有 TimedOut
。但我认为更好的解决方案是为每个 ping 生成一个新线程,这样每个主机的 ping 将是独立的。
谁能告诉我怎么做?
namespace pinguin
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
PingHost caca = new PingHost();
PingHost caca1 = new PingHost();
this.label1.Text = caca.zping("89.115.14.160");
this.label2.Text = caca1.zping("89.115.14.129");
}
}
public class PingHost
{
public string zping(string dest)
{
Application.DoEvents();
Ping sender = new Ping();
PingOptions options = new PingOptions();
options.DontFragment = true;
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 50;
int failed = 0;
int pingAmount = 5;
string stat = "";
PingReply reply = sender.Send(dest, timeout, buffer, options);
if (reply.Status == IPStatus.Success)
{
stat = "ok";
}
else
{
stat = "not ok!";
}
return stat;
}
}
}
最佳答案
如果您使用 .NET 4,则可以使用 Parallel.Invoke
.
关于C#多线程ping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218879/