Anwendung im Hintergrund

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von seh.

    Anwendung im Hintergrund

    Hallo zusammen,

    ich bin aktuell dabei eine Anwendung zu entwickeln die im Hintergrund Aufgaben wie z.B. WebRequests ausführen soll.

    Nun bin ich mir noch nicht so im Klaren wie ich das genau anstelle.
    Die Program.cs die generiert wird bei einer WinForms Anwendung startet ja die erste Form mit Application.Run(new Form1());

    Das startet ja eine Nachrichtenschleife in einem anderen Thread.
    Da ich ja jetzt eigentlich kein Fenster brauche, liegt ja nahe, das ich einen anderen Konstruktor benutze oder eben dieses Application.Run() überhaupt nicht nutze und irgendwie selbst für eine Loop sorge.
    Was ich brauche ist an sich eine Anwendung die ständig im Hintergrund läuft und alle paar Minuten mal eine WebRequest macht um Statusupdates einzuholen.
    Ich könnte jetzt natürlich einfach eine while Loop machen die ständig läuft und dann ein Thread.Sleep() von 3 Minuten oder so macht. Das kommt mir aber sehr unsauber vor. Wie macht man sowas richtig?

    Danke im Voraus
    Was? Ich habe keinen Plan was du wirklich vor hast, aber hier mal ein paar Ideen

    Wenn dein Programm keine Form braucht kannst du es auch als Konsole laufen lassen.
    Du könnstest auch eine Form ohne Tastleisteneintrag, minimiert starten lassen. Da hättest du den Vorteil das du die mit einem TryIcon versehen könntest.
    Einen Loop mit sleep würde ich nicht nutzen, eher einen Timer der alle 3min deine Funktionen aufruft.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Ich schließe mich @Schamash an, ich kann dir auch nicht recht folgen was du erreichen möchtest.

    Was gehen würde: Du schreibst einen Service der ohne Frontend auskommt und lässt da deine Funktionen drin laufen.


    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    @seh Eine Form nicht brauchen und eine Console-App schreiben sind zwei sehr verschiedene Schuhe.
    Eine Console ist dafür gemacht, gerade durchzulaufen und zu enden, wenn alles fertig ist.
    Wenn Du jedoch mit Events arbeitest, ist der Rahmen einer Form durchaus angebracht, auch wenn Du sie nicht anzeigst.
    Schreib mal etwas genauer, was da ablaufen soll.
    Async WebRequest macht sich in einer Form sehr gut.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nein ich denke @Acr0most war da mit dem Begriff Service schon sehr nah dran. Es soll keine Form existieren, auch kein Tray Icon oder ähnliches.
    Ich hab' ein Konsolenprojekt gestartet, ja, aber ich hab in den Einstellung von Konsolenanwendung auf Windows Anwendung umgestellt.
    Dadurch wird dann keine Konsole erstellt sondern das Programm bleibt unsichtbar.

    Was ich jetzt einfach nur will ist, sobald die EXE gestartet wird, alle 3 Minuten eine WebRequest auf meinen Server und die Ergebnisse in Log Dateien schreiben.
    Also wird alle 3 Minuten eine Request gemacht und danach die Festplatte mit nem Log beschrieben. Mehr nicht.

    Aber eben alle 3 Minuten und da weiß ich jetzt halt nicht genau wie ich das mache.
    wenn du bei Service bleiben möchtest, kannst hier mal schauen. Ein Timer im Service regelt das für dich.


    LG Acr0most
    Wenn das Leben wirklich nur aus Nullen und Einsen besteht, dann laufen sicherlich genügen Nullen frei herum. :D
    Signature-Move 8o
    kein Problem mit privaten Konversationen zu Thema XY :thumbup:
    @seh Mit ner (unsichtbaren) Form nimmst Du einfach einen schnöden System.Windows.Forms.Timer, den Du Dir auf die GUI ziehst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Ja im Prinzip ist es fast wie ein Service nur so spezifisch ist es nun auch nicht als das es ohne angemeldeten User laufen soll.
    Also ich werde dann wohl einfach eine unsichtbare Form erstellen und dann mit nem simplen Timer alle 3 Minuten die Requests machen.

    Falls jemand noch bessere Ideen/Vorschläge hat, gerne her damit! Ansonsten vielen Dank an alle :)
    ich glaube für dich ist es am Sinnvollsten wenn du es erstmal mit sichbarer Form machst (nur zum Üben). Da kannst du ja dann alles reinbauen was du wie willst. Und wenn du merkst das alles so läuft wie du willst ohne das du irgendwo auf ein Button klicken musst kannst du die Form ja "verstecken".
    Wenn ich das richtig verstehe happert es bei dir ehr an "Wie führe ich automatisch etwas aus?" und weniger am verstecken der Form richtig?
    @MVN050 Jou.
    @seh Außerdem kannste eine Form sehr gut debuggen, insbesondere während der Laufzeit, was bei einem Dienst nicht möglich ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!