BackgroundWorker

16/11/2009 - 08:14 von martina gerling | Report spam
Hallo,
in meinem letzten Posting fragte ich nach dem Aufruf eines Programms
(usichtbar), welches mir DAten an einen Webservice übergeben soll. Ich
habe nun in meiner Anwendung dazu einen BackgroundWorker programmiert,
welcher die Daten im Hintergrund an das Prorgamm zum versenden
übergibt.

In meiner Anwendung habe ich in unterschiedliechen Stellen dann den
Aufruf des BackgroundWorkers definiert. Leider kam es dann zu
Problemen, dass der BW ausgelastet ist und ich die Fehlermeldung
bekam.

Vielleicht mache ich aúch nur einen falschen Denkansatz. Ich möchte
zur Laufzeit Infos zum Programm sowie Messdaten übermitteln können an
eine Datenbank im Web. Das Hauotprogramm selber hat einige dynamische
Gafikelement und Ticker. Ich hatte es ursprünglich so versucht, dass
ich einfach aus meiner Hauptanwendung den WS aufgerufen habe. Dbei kam
es aber in den Tickern und Grafiken immer zu dem Zeitpunkt des WS
Aufrufs zu einem kurzen ruck.

Damit ich den Ablauf im Hauptprogramm nicht beeinflusse, wollte ich
die Übergabe der DAten extern machen.

Hier mal mein Ansatz, welcher jedoch aufgrund des BW nicht
funktioniert, wenn mehrere Aufrufe fast gleichzeitig kommen:
private void workerMessage_DoWork(object sender, DoWorkEventArgs e)
{
ProcessStartInfo startInfo = new ProcessStartInfo();

startInfo.FileName = @"F:\SendMessages\bin\Debug\SendMessages.exe";
startInfo.Arguments = (string)e.Argument;
startInfo.CreateNoWindow = true;
startInfo.ErrorDialog = true;
startInfo.UseShellExecute = false;

Process process;

try
{
process = Process.Start(startInfo);
process.WaitForExit();

if (process.ExitCode == 0)
{
//bReturn = true;
}
}
catch (Exception ex)
{

}
}

Der Aufruf erfolgt z. B so:
workerMessage.RunWorkerAsync("Show Data: " + cData[zaehler].mediap1);

Wie könnte man das noch machen? Vielleicht geht es ja auch einfacher
und ich denke mir das viel zu kompliziert.

Gruss

MArtina
 

Lesen sie die antworten

#1 Ulf [Kado] Kadner
16/11/2009 - 09:36 | Warnen spam
Hallo martina gerling! Du schriebst:

Hallo,
in meinem letzten Posting fragte ich nach dem Aufruf eines Programms
(usichtbar), welches mir DAten an einen Webservice übergeben soll. Ich
habe nun in meiner Anwendung dazu einen BackgroundWorker programmiert,
welcher die Daten im Hintergrund an das Prorgamm zum versenden übergibt.

In meiner Anwendung habe ich in unterschiedliechen Stellen dann den
Aufruf des BackgroundWorkers definiert. Leider kam es dann zu Problemen,
dass der BW ausgelastet ist und ich die Fehlermeldung bekam.



Entweder Du prüfst gegen ob der Backgroundworker beendet ist und
verschiebst den Start eines neuen Threads bis der vorherige beendet wurde
oder Du gehst hier besser gleich über Thread.Start(...) (Threadpool) wo
mehrere Threads nebeneinander problemlos möglich sind.

MfG, Ulf

Meine oeffentlichen Projekte: http://projekte.softsteps.de/
Meine Photoshop-Tutorials : http://gfx.bilbox.de/

Ähnliche fragen