嗨,我正在嘗試創建一個簡單的程式,它可以在一分鐘內對我們網路上的所有內容進行 ping 操作,并根據該 ping 的結果更改 UI。
我有一個后臺作業人員來設定變數并 ping 適當的 IP 地址。
這包含在等待的 while 回圈ping中true。在這個回圈中是一個 For 回圈,它接受用戶輸入來 ping 特定的次數。
for 回圈運行良好,在除錯中我可以看到i像往常一樣遞增。
我在 for 回圈行本身以及它后面的花括號上有一個斷點。如果用戶輸入為2,則運行兩次,然后i變數顯式變為0 ,然后到達if()陳述句
這一切都很完美,直到我在嵌套的 for 回圈中添加了一些代碼。但我看不到任何會改變的東西i
這里有一些圖片顯示我的意思
回圈運行了兩次,因此i等于 2。然后我再次繼續到花括號,i現在為 0,因此不會破壞回圈。

這是整個方法:...
private async void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// variables
bool ping = false;
int i;
// Create ping objects
// TODO read these variables in from the config screen and create a class to handle it (populatePing)
// Ping 2
ping0.SetFqdn("##");
ping0.SetIpAddress("##");
ping0.SetFriendlyName("##");
// Ping 1
ping1.SetFqdn("##");
ping1.SetIpAddress("##");
ping1.SetFriendlyName("##");
// Create file (needs updating to utilise wildcards)
using StreamWriter file = new("C:/Users/##/AppData/Roaming/log.txt", append: true);
try
{
// Create background worker
BackgroundWorker worker = (BackgroundWorker)sender;
while (!ping)
{
// Write to log file
await file.WriteAsync("Starting job...\n");
await file.WriteAsync("Requested amount of pings: " count "\n");
// Create date object for logs
DateTime localDate = DateTime.Now;
for (i = 0; i < count; i )
{
// if count has reached the user input limit, break the loop
if (i == count)
{
ping = true;
}
// Create ping objects
System.Net.NetworkInformation.Ping pinger = new System.Net.NetworkInformation.Ping();
PingReply ip0_ping, ip1_ping;
try
{
if(!ping0.Equals(null))
{
try
{
// Send ping to specified IP address
ip0_ping = pinger.Send(ping0.GetIpAddress());
// Write log file
await file.WriteLineAsync(localDate.TimeOfDay " | Friendly Name" ping0.GetFriendlyName() ": Ping: " ip0_ping.Address " status: " ip0_ping.Status ". time: " ip0_ping.RoundtripTime "ms");
// Successful ping has been sent
if(ip0_ping.Status.ToString().Contains("Success"))
{
ping0.SetSuccessfulPings(1);
} else // Unsuccessful ping has been sent
{
ping0.SetFailedPings(1);
}
}
catch(Exception d)
{
Debug.WriteLine(d.ToString());
}
} else
{
Debug.WriteLine("ERROR: ping0 is not being populated correctly");
}
if(!ping1.Equals(null))
{
try
{
// Send ping to specified IP address
ip1_ping = pinger.Send(ping1.GetIpAddress());
// Write log file
await file.WriteLineAsync(localDate.TimeOfDay " | Friendly Name" ping1.GetFriendlyName() ": Ping: " ip1_ping.Address " status: " ip1_ping.Status ". time: " ip1_ping.RoundtripTime "ms");
// Successful ping has been sent
if (ip1_ping.Status.ToString().Contains("Success"))
{
ping1.SetSuccessfulPings(1);
}
else // Unsuccessful ping has been sent
{
ping1.SetFailedPings(1);
}
}
catch(Exception d)
{
Debug.WriteLine(d.ToString());
}
}
// wait one second
wait(1000);
}
catch (Exception b)
{
Debug.WriteLine(b.ToString());
}
}
}
} catch (Exception a)
{
Debug.WriteLine(a.ToString());
}
}
...
對不起,如果這真的很明顯,但我真的很難過
uj5u.com熱心網友回復:
該方法不會退出,因為如果 i == count 則未進入 for 回圈,因為 for 回圈的條件部分會評估 i < count。
請參閱 for 回圈部分下的以下鏈接:https ://docs.microsoft.com/en-us/dotnet/csharp/language-reference/statements/iteration-statements
確定是否應執行回圈中的下一次迭代的條件部分。如果它評估為真或不存在,則執行下一次迭代;否則,退出回圈。條件部分必須是布爾運算式。
并且
迭代器部分,定義每次執行回圈體后會發生什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/497743.html
