Kommunikation zwischen Service und Windows-Anwendung

  • VB6

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Norbert.

    Kommunikation zwischen Service und Windows-Anwendung

    Habe folgende Problemstellung:
    In einem VB6-EXE (eine Auftragsbearbeitung) soll die Anwesenheit der Mitarbeiter geprüft werden und je nach An- oder Abwesenheit soll der Mitarbeiter entsprechend markiert werden.

    Wenn ich über eine Timer alle 30 Sek. nachschaue, ob sich die Anwesenheit geändert hat, gibt das all 30 Sec. eine kleine Unterbrechung z.B. bei Eingaben über Tastatur.
    Timer ist also nicht ideal.

    Mir schwebt da vor, über einen Service einen Event im VB6-Exe auszulösen.
    Ist sowas machbar? Was ist für so eine Anforderung die Ideallösung?

    Den Service kann ich in VB.net erstellen. Ebenso kann ich eine Vb.net-Komponente in mein VB6-Programm integrieren.
    Und gleich vorab: Was ich nicht kann, ist eine über 20 Jahre gewachsene Auftragsbearbeitung nach VB.Net zu portieren.

    Bin gespannt auf Eure Lösungsansätze.
    Vielen Dank im voraus.

    Norbert
    Danke für die prompte Antwort.
    Habe schon einen Blick drauf geworfen. C# ist nicht unbedingt meine Welt. Ist aber das kleinere Problem.
    Wichtig ist mir nur:
    Heißt syncronisieren, dass im VB6-Programm ein Event aufgerufen wird, wenn eben ein Mitarbeiter einstempelt?
    Wichtig ist mir, dass sich das VB6-Programm NUR DANN um die Aktualisierung der Anwesenheitsanzeige kümmert, wenn sich auch tatsächlich was geändert hat.

    Norbert schrieb:

    C# ist nicht unbedingt meine Welt
    Du kannst die Seite oben auf VB umstellen.

    Norbert schrieb:

    dass im VB6-Programm ein Event aufgerufen wird
    Ich habe in der Tiefe leider nie mit VB6 programmiert.
    In Saurier-Zeiten waren meine Entwicklungen eher von C und Pascal geprägt.
    Aber auch in VB6 müsste ein asynchrones Read möglich sein.

    Falls nicht, kannst du auch einen anderen Weg gehen, der noch nicht mal einen extra Service benötigt.
    Ein kluger Kopf hat sich mal mit MultiThreading unter VB6 auseinandergesetzt.
    Vielleicht wäre das ein Ansatz.

    Je mehr ich aber über das Thema nachdenke, verstehe ich nicht, warum ein Timer die Benutzereingabe blocken soll.
    Ein Timer läuft doch ebenfalls nebenläufig.
    Was machst du denn im Timer-Event kompliziertes?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hab den C#-Code auf VB.Net umgestellt. War aber gut versteckt. Danke für den Tipp!

    Timer:
    Wie gesagt, er aktualisiert eine Anzeige. Habe diese Aktualisierung auch optimiert, läuft im Prinzip auch schon "ruckelfrei".
    Aber ich möchte halt auch das Problem prinzipiell lösen. Es werden Anforderungen kommen, die das Auslösen eines Events wirklich nötig machen.
    Da möchte ich gewappnet sein.
    OK, bei der Aktualisierung der Anzeige hast du das Problem vermutlich immer, egal mit welcher Technik du arbeitest.
    Sowohl die Anzeige als auch die Aktualisierung muss im GUI-Thread passieren und das konkurrenziert sich eben.

    Du könntest ggf. die Tastatureingaben überwachen und mit dem Update auf eine Pause warten.

    Vielleicht hat ja sonst jemand einen Tipp, wie man die Eingabe und die Ausgabe in WinForms so aufeinander abstimmt, dass kein gegenseitiger Einfluss spürbar ist.
    Mir fällt da momentan nichts ein.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()