У меня проблема только с двумя фоновыми работниками. Рабочий 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();
}
}