我试图创建一个方法,它在传递带有可ping主机名的数据引用时尝试ping每个主机,然后更改相应的列和行的值在ping成功。在Parallel.ForEach循环中对引用的数据表进行更改
但是我不能在Parallel.ForEach方法中使用引用。有什么办法可以使这项工作?
这里是我的代码:
public void checkON(ref DataTable PCS)
{
Parallel.ForEach(PCS.AsEnumerable(), pc =>
{
string loopIp = pc["Name"].ToString();
if (PingIP(loopIp))
{
DataRow[] currentpc = PCS.Select("Name = '{0}'", loopIp);
currentpc[0]["Online"] = "ON";
}
else
{
DataRow[] currentpc = PCS.Select("Name = '{0}'", loopIp);
currentpc[0]["Online"] = "OFF";
}
}
);}
那你为什么需要'ref'?从你的代码我看不到一个原因。而且'DataTable'线程安全? (它应该,国际海事组织,但...我们确定?) –
@Adriano我很确定它*不是*; p –