BackgroundWorker не может быть запущен, даже если я объявил об этом в designer.cs и правильно добавил его из панели инструментов - PullRequest
0 голосов
/ 18 апреля 2020

У меня проблема только с двумя фоновыми работниками. Рабочий DoWork не может быть запущен, пока я объявил его в designer.cs, и я поместил следующий код в начало этого метода для двух фоновых рабочих, и в окне вывода нет вывода, то есть RunWorkerAsync() не может быть запущен ...

Trace.WriteLine("in worker");

Trace.Indent();

Trace.Flush();

Любая идея, пожалуйста?

Здесь, где я инициализировал и настроил мой BW в файле designer.cs:

this.startNetworkingWithCourierNodes = new System.ComponentModel.BackgroundWorker();

this.startNetworking = new System.ComponentModel.BackgroundWorker();

this.startNetworking.WorkerReportsProgress = true;

this.startNetworking.WorkerSupportsCancellation = true;

this.startNetworking.DoWork += new System.ComponentModel.DoWorkEventHandler(this.startNetworking_DoWork);

this.startNetworkingWithCourierNodes.WorkerReportsProgress = true;

this.startNetworkingWithCourierNodes.WorkerSupportsCancellation = true;

this.startNetworkingWithCourierNodes.DoWork += new System.ComponentModel.DoWorkEventHandler(this.startNetworkingWithCourierNodes_DoWork);

public System.ComponentModel.RunWorkerCompletedEventHandler startNetworking_RunWorkerCompleted { get; set; } 

public System.ComponentModel.RunWorkerCompletedEventHandler startNetworkingWithCourierNodes_RunWorkerCompleted { get; set; }

Метод startNetworkingWithCourierNodes:

private void startNetworkingWithCourierNodes_DoWork(object sender, DoWorkEventArgs e)

        {



            Trace.WriteLine("in worker");

            Trace.Indent();

            Trace.Flush();



            //some code 



            DateTime startT = DateTime.Now;



            while (!sensorDie)

            {



              // some code 





                if (startNetworkingWithCourierNodes.CancellationPending)

                {

                    e.Cancel = true;

                    break;

                }







                while (!isFound)

                {





                    isFound = Find();



                    if (isFound || stopwatch.Elapsed.TotalSeconds >= 10)

                        break;



                     // some code 





                } // end of the courier loop (while) 





                 // some code 





            } // end of the outer while (simulation) 





        }

Метод "startNetworking" такой же, как и выше, с небольшой разницей и следующим кодом, в котором я их вызвал:

public void startSensors()

        {





           // some code 



            if (theApprochFlag == true)

            {



                for (int i = 0; i < CNodeNum; i++)

                {





                    // 800 m - 1000 m layer #1 // 



                    if (CNs[i].cnDepth >= 652 && CNs[i].cnDepth <= 750)

                    {



                        CNs[i].auv = auv[0];



                    }







                    // 600 m - 800 m layer #2 // 



                    if (CNs[i].cnDepth >= 553 && CNs[i].cnDepth <= 652)

                    {



                        CNs[i].auv = auv[1];



                    }



                    // 400 m - 600 m layer #3 //



                    if (CNs[i].cnDepth >= 454 && CNs[i].cnDepth <= 553)

                    {



                        CNs[i].auv = auv[2];



                    }



                    // 200 m - 400 m layer #4 // 



                    if (CNs[i].cnDepth >= 355 && CNs[i].cnDepth <= 454)

                    {



                        CNs[i].auv = auv[3];



                    }





                }





                    startNetworkingWithCourierNodes.RunWorkerAsync();





            }





            else

            {



                startNetworking.RunWorkerAsync();

            }



        }
...