此后台工作线程当前繁忙,无法在 PING IP 地址时同时运行多个任务

本文关键字:地址 IP PING 运行 任务 线程 工作 后台 | 更新日期: 2023-09-27 18:32:25

当我的程序执行 PING 时,我在使用 ProgressBar 时遇到问题。错误指出"此后台工作线程当前繁忙,无法同时运行多个任务"。谁能帮我?这些是我所做的

private void ProsesSemuaKamera()
        {
            Stopwatch watch = Stopwatch.StartNew();
            Ping ping = new Ping();
            PingReply pingreply;
            BackgroundWorker BWKamera = new BackgroundWorker();
            OleDbConnection kon = new OleDbConnection(koneksi);
            OleDbCommand command = kon.CreateCommand();
            kon.Open();
            string selecturl = "select * from datakamera";
            command.CommandText = selecturl;
            OleDbDataReader bacadata = command.ExecuteReader();

            /* PING Kamera IP */
            while (bacadata.Read())
            {
                pingreply = ping.Send(bacadata["ipadd"].ToString());
                BWKamera.WorkerReportsProgress = true;
                BWKamera.DoWork += BWKamera_DoWork;
                BWKamera.ProgressChanged += BWKamera_ProgressChanged;
                BWKamera.RunWorkerAsync(); //error exists here
                if (pingreply.Status == IPStatus.Success)
                {
                    listBox1.Items.Add(bacadata["namakamera"].ToString());
                    if (CaptureSemuaKamera == null)
                    {
                        try
                        {
                            CaptureSemuaKamera = new Capture(bacadata["urlkamera"].ToString());
                        }
                        catch (NullReferenceException ex)
                        {
                            MessageBox.Show(ex.Message);
                        }
                    }
                    if (CaptureSemuaKamera != null)
                    {
                        Application.Idle += new EventHandler(ProcessFrameSemuaKamera);
                    }

                }
                else if (pingreply.Status != IPStatus.Success)
                {
                    listBox2.Items.Add(bacadata["namakamera"].ToString());
                }
                watch.Stop();
                File.AppendAllText(@"D:'Dokumen'Alfon'TA Alfon'Waktu Eksekusi Ping.txt", "Waktu eksekusi ping " + DateTime.Now + " :" + " " + watch.Elapsed.TotalMilliseconds.ToString() + Environment.NewLine);
            }       
            kon.Close();
       }
private void BWKamera_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 1; i <= 1000; i++)
            {
                BWKamera.ReportProgress(i);
                Thread.Sleep(1000);
            }
        }
        private void BWKamera_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            ProgressBarKamera.Value = e.ProgressPercentage;
            StatusKamera.Text = "Please Wait...";
        }
        private void BWKamera_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            StatusKamera.Text = "Done !";
        }

此后台工作线程当前繁忙,无法在 PING IP 地址时同时运行多个任务

因为它处于一段时间循环中。 我将假设第一个后台工作线程尚未完成,并且您告诉它在同一实例上再次运行。

OleDbDataReader bacadata = command.ExecuteReader();
BWKamera.WorkerReportsProgress = true;
BWKamera.DoWork += BWKamera_DoWork;
BWKamera.ProgressChanged += BWKamera_ProgressChanged;
BWKamera.RunWorkerAsync(bacadata);

然后,后台工作线程代码将如下所示:

        private void BWKamera_DoWork(object sender, DoWorkEventArgs e)
    {
    OleDbDataReader bacadata = (OleDbDataReader)e.Argument;
    while (bacadata.Read())
        {
            pingreply = ping.Send(bacadata["ipadd"].ToString());