我有方法PatchUpdates
调用CheckConnection
方法来检查与远程pc的连接是否为true然后它将返回第一个方法到用户界面并做一些其他的东西
我搜索并发现我需要使用线程,所以我正在创建新线程 但我的应用程序挂起并停止,没有任何反应
请问我做错了什么?
谢谢
public void PatchUpdates()
{
try
{
foreach (DataGridViewRow OfficeListRow in DGV_OfficeList.Rows)
{
string vIPAddress;
string vSoruceFilePath;
int RowNum;
foreach (DataGridViewRow FileListRow in DGV_FileList.Rows)
{
Thread thrd = new Thread(new System.Threading.ThreadStart(PatchUpdates));
thrd.Start();
vIPAddress = OfficeListRow.Cells[1].Value.ToString();
vSoruceFilePath = FileListRow.Cells[4].Value.ToString();
RowNum = OfficeListRow.Index;
///Check the connection to pc
if (CheckConnection(vIPAddress) == true)
{
//MessageBox.Show(vIPAddress + " Pingable ");
DGV_OfficeList[2, RowNum].Value = "Online";
OfficeListRow.DefaultCellStyle.BackColor = Color.LightGreen;
}
else
{
//MessageBox.Show(vIPAddress + " Not Pingable ");
DGV_OfficeList[2, RowNum].Value = "Offline";
OfficeListRow.DefaultCellStyle.BackColor = Color.LightCyan;
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public static bool CheckConnection(string IPAddress)
{
bool vPingable = false;
try
{
Ping png = new Ping();
PingReply PngReply = png.Send(IPAddress);
vPingable = PngReply.Status == IPStatus.Success;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
return vPingable;
}
答案 0 :(得分:1)
您正在PatchUpdates
方法中将PatchUpdates()
传递给ThreadStart委托。
Thread thrd = new Thread(new System.Threading.ThreadStart(PatchUpdates));
thrd.Start();
这意味着PatchUpdates()
方法在新的第二个线程上重新开始,它将在新的第三个线程上重新开始,它将在新的第四个线程上重新开始,上...
基本上你是在开始无限的新线程(只要DGV_FileList.Rows
中有项目),这将最终消耗你所有的资源。