如何修复 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();