如何修复 backgroundWorker1.RunWorkerAsync() 在当前上下文中不存在
How to fix backgroundWorker1.RunWorkerAsync() does not exist in current context
我已经按照教程一步一步地 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 实例。当然,这取决于您正在学习的教程。
您可能需要在设计器中创建一个 BackgroundWorker 组件,但可能错过了这一步。此外,您可能已重命名该组件,但它并未在您的代码隐藏文件中重命名。
或者,您需要自己将实例创建为字段,然后只需将以下行添加到 Form1 class:
private System.ComponentModel.BackgroundWorker backgroundWorker1 = new BackgroundWorker();
我已经按照教程一步一步地 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 实例。当然,这取决于您正在学习的教程。
您可能需要在设计器中创建一个 BackgroundWorker 组件,但可能错过了这一步。此外,您可能已重命名该组件,但它并未在您的代码隐藏文件中重命名。
或者,您需要自己将实例创建为字段,然后只需将以下行添加到 Form1 class:
private System.ComponentModel.BackgroundWorker backgroundWorker1 = new BackgroundWorker();