Dshing
Lt. Commander
- Registriert
- Nov. 2007
- Beiträge
- 1.436
Hi,
ich habe gerade ein Problem.
Ich habe einen backgroundWorker, in dem ich auf bestimmte Ereignisse warte (Temperaturen vom System), wenn diese nun eintreten soll ein anderer backgroundWorker gestartet werden, der 1.8s braucht bis er fertig ist und sich dann wieder beendet. Nun soll aber der erste backgroundWorker in einem kleineren Intervall als 1.8s arbeiten, daher bedarf es noch eines Kriteriums, das der zweite backgroundWorker erst nach frühestens 1.8s wieder gestartet wird.
Eigentlich sollte der Code das auch sicher stellen bin ich der Meinung, aber irgendwie bekomme ich immer die Fehlermeldung: "Dieser BackgroundWorker ist derzeit ausgelastet und kann nicht mehrere Aufgaben gleichzeitig ausführen." wenn der zweite backgroundWorker starten sollte.
Also wenn ich es manuell starte und min. 1.8s warte, dann klappt es auch, also scheint er in meinem Code mehrmals zu starten. Nur sehe ich nicht warum. Könnt ihr mir helfen?
a und b sind globale Variablen, die bisher aber nur in dem Abschnitt hier verwendet werden
ich habe gerade ein Problem.
Ich habe einen backgroundWorker, in dem ich auf bestimmte Ereignisse warte (Temperaturen vom System), wenn diese nun eintreten soll ein anderer backgroundWorker gestartet werden, der 1.8s braucht bis er fertig ist und sich dann wieder beendet. Nun soll aber der erste backgroundWorker in einem kleineren Intervall als 1.8s arbeiten, daher bedarf es noch eines Kriteriums, das der zweite backgroundWorker erst nach frühestens 1.8s wieder gestartet wird.
Eigentlich sollte der Code das auch sicher stellen bin ich der Meinung, aber irgendwie bekomme ich immer die Fehlermeldung: "Dieser BackgroundWorker ist derzeit ausgelastet und kann nicht mehrere Aufgaben gleichzeitig ausführen." wenn der zweite backgroundWorker starten sollte.
Also wenn ich es manuell starte und min. 1.8s warte, dann klappt es auch, also scheint er in meinem Code mehrmals zu starten. Nur sehe ich nicht warum. Könnt ihr mir helfen?
Code:
private void backgroundWorker3_DoWork_1(object sender, DoWorkEventArgs e)
{
while(1==1)
{
backgroundWorker3.ReportProgress(1);
System.Threading.Thread.Sleep(100);
}
}
private void backgroundWorker3_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
b++;
if (b == 60000)
{
b = 10000;
}
label5.Text = everest("Value.TCC-1-1");
label6.Text = everest("Value.TCC-1-2");
label7.Text = everest("Value.TCC-1-3");
label8.Text = everest("Value.TCC-1-4");
label9.Text = everest("Value.TGPU1DIOD");
label10.Text = everest("Value.TGPU1DIOM");
label11.Text = everest("Value.TGPU1DIOS");
label12.Text = everest("Value.TMOBO");
if (a==0 && Convert.ToDouble(everest("Value.TCC-1-1")) >= 55 || Convert.ToDouble(everest("Value.TCC-1-2")) >= 55 || Convert.ToDouble(everest("Value.TCC-1-3")) >= 55 || Convert.ToDouble(everest("Value.TCC-1-4")) >= 55
|| Convert.ToDouble(everest("Value.TGPU1DIOD")) >= 55 || Convert.ToDouble(everest("Value.TGPU1DIOM")) >= 60 || Convert.ToDouble(everest("Value.TGPU1DIOS")) >= 55)
{
a = 1;
b = 0;
label13.Text = "warm";
backgroundWorker4.RunWorkerAsync();
}
if (b==700 && Convert.ToDouble(everest("Value.TCC-1-1")) <= 37 && Convert.ToDouble(everest("Value.TCC-1-2")) <= 37 && Convert.ToDouble(everest("Value.TCC-1-3")) <= 37 && Convert.ToDouble(everest("Value.TCC-1-4")) <= 37
&& Convert.ToDouble(everest("Value.TGPU1DIOD")) <= 37 && Convert.ToDouble(everest("Value.TGPU1DIOM")) <= 44 && Convert.ToDouble(everest("Value.TGPU1DIOS")) <= 43)
{
serialPort1.Write(new byte[] { 0x21 }, 0, 1);
a = 0;
label13.Text = "kalt";
}
}
private void backgroundWorker4_DoWork(object sender, DoWorkEventArgs e)
{
serialPort1.Write(new byte[] { 0x20 }, 0, 1);
System.Threading.Thread.Sleep(100);
serialPort1.Write(new byte[] { 0x13 }, 0, 1);
System.Threading.Thread.Sleep(700);
serialPort1.Write(new byte[] { 0x12 }, 0, 1);
System.Threading.Thread.Sleep(1000);
serialPort1.Write(new byte[] { 0x11 }, 0, 1);
System.Threading.Thread.Sleep(100);
serialPort1.Write(new byte[] { 0x10 }, 0, 1);
backgroundWorker4.CancelAsync();
}