Iceman346 Geschrieben 30. März 2009 Geschrieben 30. März 2009 Vorweg: Ich bin ziemlich unbedarft im Multithreading, also nicht schlagen wenn ich doofe Fragen stelle Ich habe hier auf der Arbeit ein Programm programmiert, welches Dateien von einem FTP Server herunterläd, diese dann in ein bestimmtes Verzeichnis schiebt, regelmäßig nachschaut ob diese Dateien eine externe Vearbeitung durchlaufen haben und die Ergebnisdateien dann weiterverarbeitet. Bei Testläufen heute hab ich gemerkt, dass es doch sehr unschön wirkt, wenn das Programm während des FTP Downloads absolut nicht reagiert und so wirkt als wäre es abgestürzt. Also dacht ich mir, verfrachte ich den FTP Downloadprozess in einen eigenen Thread. Das klappt soweit auch wunderbar, der Download läuft, das Programm reagiert noch auf Mauseingaben und es sorgt nicht für 100% Auslastung auf einem CPU Kern. Problem ist nun folgendes. Am Ende der Downloadprozedur starte ich normalerweise den Timer der für die Überwachung des Ausgabeverzeichnisses der externen Bearbeitung zuständig ist. Dies passiert einfach über ein TimerArbeit.Start() Nach Ende des Downloadthreads wird dieser Timer aber nie wirklich abgearbeitet. Wenn ich den Status abfrage kriege ich zwar die Rückmeldung, dass TimerArbeit.Enabled = True aber die MessageBox die ich beim Start des Timers eingebaut hab erscheint nie und die Dateien werden auch nicht weiterverarbeitet. Hat jemand nen Tipp wie ich den Timer zum laufen bekomme? Hab mir schon Invokes angeschaut (weil ich aus dem Downloadthread auf eine TextBox der Form zugreifen wollte), aber das gibts für Timer nicht. Zitieren
Kati82 Geschrieben 30. März 2009 Geschrieben 30. März 2009 Welchen Timer verwendest du? Ich glaub, es gibt nämlich zwei unterschiedliche Timer. Vielleicht ist dir das schon eine Hilfe. Gruß Kati82 P.S.: Mit welcher Programmiersprache machst du das? Zitieren
Iceman346 Geschrieben 30. März 2009 Autor Geschrieben 30. März 2009 Argl, die Programmiersprache hätte ich natürlich nennen sollen. Ich nutze Visual Basic. Nutzen tu ich den ganz normalen System.Windows.Forms.Timer Zitieren
Kati82 Geschrieben 31. März 2009 Geschrieben 31. März 2009 Ich hab ehrlich gesagt, noch nicht verstanden, was du mit dem Timer anstellen möchtest. Nachdem der Download fertig ist, startest du also einen Timer. Möchstest du, dass für eine bestimmte Zeit etwas getan wird? Ich kenn mich jetzt nicht so wahnsinnig doll mit Visual Basic aus und mit Timern habe ich bisher auch nur wenig gearbeitet. Aber vielleicht ist der System.Threading.Timer besser geeignet für dich. Vielleicht schilderst du noch mal stichpunktartig, wie du dir den Ablauf vorstellst. Vielleicht wirds dann klarer. Gruß Kati82 Zitieren
Iceman346 Geschrieben 31. März 2009 Autor Geschrieben 31. März 2009 Der Timer schaut im Endeffekt im jedem Tick in die Ausgabeverzeichnisse der externen Bearbeitung, vergleicht die dort liegenden Dateien mit den Eingangsdateien und schiebt diese dann entsprechend weiter. Ich hab das nun momentan erstmal über ne Variable gelöst. Die Downloadprozedur hat sowieso ne Variable gesetzt wenn Dateien in die Bearbeitung gegeben wurden und ich habs jetzt erstmal so geändert, dass der Timer für die Überwachung ständig läuft, aber nur wirklich arbeitet wenn diese Variable gesetzt wurde. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.