Zum Inhalt springen
  • 0

C# unsichtbares Fenster


Tician

Frage

Moin!

Ich hab ein Programm das ähnlich wie ein Service im Hintergrund laufen soll. Es hat kein Fenster und wird auch nicht in der Taskleiste angezeigt.

Soweit so gut funktioniert es auch. Benutzt dazu wurde folgender Code:

					this.FormBorderStyle = FormBorderStyle.None;
                    this.ShowInTaskbar = false;
                    this.Load += new EventHandler(Form1_Load);

private void Form1_Load(object sender, EventArgs e)
        {
            this.Size = new Size(0, 0);
        }

Jetzt soll das auch bei Fehlern so bleiben, das Programm schreibt bei Fehlern in eine Text-Datei und pausiert dann für 10 Minuten bevor es erneut den Code in einer Schleife ausführt. Allerdings hab ich nun das Problem das anscheinend bei Thread.Sleep() das Programm in der Taskleiste mit buntem Symbol auftaucht. Man kann es nicht anklicken, es erscheint natürlich kein Fenster aber für den Benutzer ist es natürlich irritierend. Der Code zum Fehler abfangen sieht so aus:

while ()
            {
                try
                {
                }

                catch (Exception ex)
                {
                    sw = new StreamWriter(tmpPath + "TicianClient.log", true);
                    sw.WriteLine(ex.Message + " " + DateTime.Now);
                    sw.Close();
                    Thread.Sleep(600000);
                }
			}

Eine Idee warum das so ist und wie ich das vermeiden kann?

Link zu diesem Kommentar
Auf anderen Seiten teilen

14 Antworten auf diese Frage

Empfohlene Beiträge

  • 0
vor 6 Minuten schrieb Mttkrb:

Hi,

Wäre es nicht sinnvoller als Start-Projekt anstatt einer "Forms-Anwendung" ein StartProjekt vom Typ "Windows Service" zu nutzen?
Dann kann das Programm später direkt über die Dienste gesteuert werden.

Gruß

Das ist nicht nur sinnvoller, sondern es sollte auch so gemacht werden:

Walkthrough: Creating a Windows Service Application in the Component Designer

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Ich hatte es mal probiert. Ich slebst kann kein WIndows-Service erstellen mit meiner Community-Edition. Mein Ausbilder hat es erstellt und ich sollte es bearbeiten aber dann waren da Dinge in der Anleitung die ich einstellen sollte und bei mir nicht gefunden habe also habe ich es gelassen.

@Gottlike Steht bereits in meinem Code, macht es einen unterschied wenn ich es in den "Form_Load" reinschmeiße?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Die Vorlage ist unter Umständen nicht direkt sichtbar.

Wenn du ein neues projekt über File->New->Project hinzufügst, rechts oben in der Suchmaske "Windows Service" eintragen. Dann sollte die Projektvorlage auftauchen. Alles andere ist nur frickelei.

Bearbeitet von Mttkrb
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
vor 24 Minuten schrieb Gottlike:

Worunter steht es denn momentan?
Ich würde es einfach im Konstruktor definieren.

 

Warum nicht gleich im Designer festlegen?

Dennoch ist das eine Frickelei und sollte auch so nicht umgesetzt werden.
In ein WinForms-Projekt sollte keine Logik hinterlegt werden. Eigentlich sollte grundsätzlich in kein ausführbares Projekt Logik hinterlegt werden, weil es die Wiederverwendbarkeit erschwert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Abgesehen von all' den anderen Problemen, die bereits angesprochen wurden, würde ich

Thread.Sleep()

in einer Anwendung (fast) immer vermeiden. Guck' dir stattdessen mal einen Timer (System.Windows.Forms.Timer oder System.Timers.Timer) an und lass den einfach nach 10 Minuten "ticken". Dann hängst du dein Programm nicht für 10 Minuten auf und es sollte auch nicht zu irgendwelchem "komischen" Verhalten kommen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

Bei uns gibt es niemanden der Programmieren kann und außer mir und meinem Ausbilder gibt es auch keine anderen Informatiker hier. Was ich mache sind im Prinzip nur kleine Dinge die einem das Leben (arbeiten^^) einfacher machen sollen.

Mein Problem war das ich schon einen Timer habe und IN diesem Timer soll bei einem Exception 10 Minuten pausiert werden, bevor der Timer wieder losrennt, aber das habe ich gelöst.

Zurück zum Topic, alles was meine Form und deren Sichtbarkeit betrifft sieht so aus:

		public Form1()
        {
                    this.FormBorderStyle = FormBorderStyle.None;
                    this.ShowInTaskbar = false;
                    this.Load += new EventHandler(Form1_Load);
		}

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Size = new Size(0, 0);
        }

Funktioniert ja wie gesagt auch einwadnfrei, es sei denn ein Exception wird geworfen (Wie gesagt die Exception ist im Timer.Tick Event drin)

catch (Exception ex)
            {
                sw = new StreamWriter(tmpPath + "MessageClient.log", true);
                sw.WriteLine(ex.Message + " " + DateTime.Now);
                sw.Close();
                Thread.Sleep(600000);
            }

Dann taucht in der Taskleiste ein Fenster auf das einfach nur nervig ist und mit dem man nichts tun kann, weder schließen noch anklicken noch sonst irgendwas. Wenn die Sleep-Zeit vorbei ist tut es dann wieder und das Fenster ist verschwunden.

Das wäre gerade "nur" ein Schönheitsfehler

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...