Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

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?

Argl, die Programmiersprache hätte ich natürlich nennen sollen. Ich nutze Visual Basic.

Nutzen tu ich den ganz normalen System.Windows.Forms.Timer

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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.