C# 多线程ping并写入文件
时间: 2023-10-30 11:04:52 浏览: 154
C#调用ping
3星 · 编辑精心推荐
以下是一个使用C#多线程ping并将结果写入文件的示例代码:
```csharp
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.NetworkInformation;
using System.Threading;
class Program
{
static void Main(string[] args)
{
// 创建一个列表,包含要ping的IP地址
List<string> addresses = new List<string>
{
"www.google.com",
"www.baidu.com",
"www.microsoft.com",
"www.apple.com",
"www.amazon.com"
};
// 创建一个文件流,用于写入ping结果
using (StreamWriter writer = new StreamWriter("ping_results.txt"))
{
// 创建一个计数器,用于跟踪已完成ping的地址数量
int count = 0;
// 遍历IP地址列表
foreach (string address in addresses)
{
// 创建一个新线程执行ping操作
Thread t = new Thread(() =>
{
try
{
// 创建一个Ping对象并发送ping请求
Ping pingSender = new Ping();
PingReply reply = pingSender.Send(address);
// 将ping结果写入文件
writer.WriteLine("{0}: {1}", address, reply.Status);
}
catch (Exception ex)
{
// 发生异常时也将结果写入文件
writer.WriteLine("{0}: {1}", address, ex.Message);
}
finally
{
// 计数器加1
Interlocked.Increment(ref count);
}
});
// 启动线程
t.Start();
}
// 等待所有线程完成
while (count < addresses.Count)
{
Thread.Sleep(100);
}
}
Console.WriteLine("Ping完成,结果已写入文件。");
Console.ReadKey();
}
}
```
在此示例中,我们使用了一个`List<string>`对象来存储要ping的IP地址。我们遍历该列表,并为每个地址创建一个新线程执行ping操作。每次ping完成后,我们将结果写入一个文件中。
注意,我们在写入文件时使用了`StreamWriter`类,它会自动处理文件流的打开和关闭。我们还使用了`Interlocked.Increment`方法来对计数器进行原子操作,以确保线程安全。最后,我们在主线程中等待所有线程完成后输出一个完成消息。
当然,这只是一个简单的示例,你可以根据自己的需求对代码进行修改和扩展。
阅读全文