【发布时间】:2021-08-18 09:30:48
【问题描述】:
我按照教程一步一步地 ping 多个 IP 地址,并在 ping 结果中分别显示红色框或绿色框(红色 - 失败,绿色 - 成功)
我现在卡在上面写着backgroundWorker1.RunWorkerAsync() does not exist in current context.的这一点上
public partial class Form1 : Form
{
DataTable pingTable = new DataTable();
List<string> ipAddress = new List<string>();
List<PictureBox> pictureboxList = new List<PictureBox>();
private System.Timers.Timer timer;
public Form1()
{
InitializeComponent();
timer = new System.Timers.Timer();
timer.Interval = 5000;
timer.Enabled = true;
timer.Elapsed += timer_Elapsed;
}
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void FillPingTable()
{
pingTable.Columns.Add("ip", typeof(string));
pingTable.Columns.Add("picturebox", typeof(string));
pingTable.Rows.Add();
for(int i = 0; i< ipAddress.Count; i++)
{
pingTable.Rows.Add(ipAddress[i], pictureboxList[i]);
}
}
private void Form1_Load(object sender, EventArgs e)
{
using (var reader = new StreamReader(@"C:\Users\Admin\Network\ipAddress.csv"))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split('\n');
ipAddress.Add(values[0]);
}
for(int i = 1; i<= 57; i++)
{
pictureboxList.Add((PictureBox)Controls.Find("pictureBox" + i, true)[0]);
}
FillPingTable();
backgroundWorker1.RunWorkerAsync();
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Thread.Sleep(500);
Parallel.For(0, ipAddress.Count(), (i, loopSate) =>
{
Ping ping = new Ping();
PingReply pingReply = ping.Send(ipAddress[i].ToString());
this.BeginInvoke((Action)delegate ()
{
pictureboxList[i].SizeMode = PictureBoxSizeMode.Zoom;
pictureboxList[i].BackColor = (pingReply.Status == IPStatus.Success) ? Color.Green : Color.Red;
});
});
}
我已经仔细检查了这些步骤,但在这里找不到我做错了什么?
我使用的是最新版本的 Visual Studio。
谢谢
【问题讨论】:
-
你的 backgroundWorker1 是否在设计器中创建?也许您在设计器中对其进行了重命名,但代码仍然具有旧字段名称?显然,您可以通过简单地添加“private BackgroundWorker backgroundWorker1 = new BackgroundWorker();”将其实例化为该文件中的一个字段。其中定义了类的其他字段。
-
哈哈!我知道我错过了一些东西,有一点错字问题 :-( 感谢您的帮助 :-)
-
如果有帮助,请将我的回答标记为已接受。谢谢!
-
我现在唯一的问题是它没有ping通csv文件中的IP?
-
您是否尝试过在 backgroundWorker1_DoWork 中设置断点?如果未命中此断点,则您可能缺少 BackgroundWorker 的初始设置(例如订阅其 DoWork 事件,如 backgroundWorker1.DoWork += backgroundWorker1_DoWork;)