有时候为了提高CPU的利用率,我们就会选择在c#中使用多线程,即,在相同的时间里面做更多的事情(但前提条件是系统资源没有完全耗尽)。
一、在什么样的情况下使用多线程
因此,并非是处处使用多线程是上策,而是在硬件配置比较高的情况下,使用多线程是更好的选择,因为这样做更有效益。
举个例子来说吧,比如,某机房有99台计算机,您想使用其中的一台计算机,利用PING命令来检查剩余的98台计算机,其网络状态是否畅通?
你会怎么做?当然,很多人都知道,使用循环,在循环中调用PING命令来实现。这本身没有错,但是,这样的做法无异于先PING第一台,完毕之后再PING第二台,完毕之后再PING第三台……一直到完。这相当于什么呢,相当于逐一Ping这98台计算机。要知道PING是消耗时间的,尤其是当某台或多台计算机网络连接状态断开的时候,更消耗时间;万一所有的计算机都没有开机,那么,您Ping完98次,得需要多少时间?
为了解决这个问题,我们需要使用多线程来处理。让这98次的Ping,在同一时间进行。如此计算,在效益和时间上,比上述的方法提供了98倍。
二、带参数多线程之c#代码实例
本例,本站要给大家介绍的是,带参数的多线程实例。实例的代码功能是,通过带参数的多线程,在同一时间Ping98台计算机,检查其网络连接是否正常。
①前提条件
前提条件是,在uing中,引入如下的两个命名空间。
using System.Threading;//多线程要使用它
using System.Net.NetworkInformation; //Ping命令要使用它
②实例
A:带参数的多线程函数代码
public void TestConnection(object MyValue)//通过PING对方计算机名称或IP,检查计算机是否连接正常
{
string message;
message = "";
Ping p = new Ping();
try
{
PingReply r = p.Send(MyValue.ToString().Trim());
if (r.Status == IPStatus.Success)
{
message = "Success";
}
}
catch
{
}
finally
{
if (message == "Success")
{
//MessageBox.Show("网络连接畅通");
}
else
{
//MessageBox.Show("网络连接异常");
}
}
}
代码解释:上述的object MyValue就是要接收的参数。
B:调用函数带参数的多线程代码
Thread[] myThread = new Thread[98];//定义多线程数组(98个)
int Myboot = 0;
for(int i=1;i<=98;i++)
{
ParameterizedThreadStart ParStart = new ParameterizedThreadStart(TestConnection);//引用函数名称
myThread[Myboot] = new Thread(ParStart);//定义多线程
object O = “192.168.0.“+i.ToString().Trim();//给参数赋值
myThread[Myboot].Start(O);//启动带参数的多线程
Myboot = Myboot + 1;
}
}
到此,实例完毕。以上代码,均本站严格测试,未发现任何错误。希望本文对您有帮助。