Autor Beitrag
mokus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

Win 7 Pro.
C#, VS 2010
BeitragVerfasst: Do 25.12.08 21:19 
Hi,
ich habe mal eine Frage, besteht die Möglihckeit in C# ein Programmcode im Hintergrund laufen zu lassen ohne ein Form???
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 25.12.08 22:50 
Hallo!

Kannst Du das ein bisschen genauer beschreiben? Prinzipiell musst Du in Deinem Programm ja kein Fenster erstellen.

Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
mokus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

Win 7 Pro.
C#, VS 2010
BeitragVerfasst: Sa 27.12.08 18:27 
Also ich möchte das Programm im Hintergrund laufen lassen, ganz ohne Form. Wie mache ich es aber dann, dass sich das Programm nicht beendet, da mit Form ja auf das schließen gewartet wird und so aber das Programm sofort nachdem starten sich wieder beendet. Ich habe daran vieleicht an eine Schleife gedacht, aber da mache ich mir gedanken das sie dann vieleicht den CPU auslastet.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 27.12.08 18:51 
Bei einem Fenster gibt es eine Nachrichtenwarteschlange, die auf neue Nachrichten wartet. Aber dein Programm soll ja wohl nicht einfach nur nicht sich beenden, es muss ja auch eine Aufgabe haben.

Ansonsten könntest du einfach eine Eingabe auf der Konsole vom Benutzer anfordern, zum Beispiel Enter zu drücken, derweil bleibt das Programm am laufen, macht aber auch nix. Aber so hört sich ja auch an was du vor hast. :nixweiss:

Eine Warteschleife muss nicht viel CPU Auslastung verursachen, es kommt immer darauf an wie du sie implementierst. Aber die Frage ist: worauf warten? Auf eine bestimmte Zeit? Ein Ereignis?
mokus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

Win 7 Pro.
C#, VS 2010
BeitragVerfasst: Sa 27.12.08 19:25 
Habe vor einen Timer zu programmieren der etwa alle 30 Minuten etwas ausführt.
miniC#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Wiin XP Home
C# VS Express 2008
BeitragVerfasst: Sa 27.12.08 19:56 
hm,

vielleicht verstehe ich mal wieder die frage net ganz, aber wieso verwendest du nicht einfacht die show/hide methoden deiner
entsprechenden control ? natürlich ginge es auch ohne form, aber die sinnhaftigkeit eines programms, welches wirklich garkeine
usereingaben ermöglicht, wage ich zu bezweifeln. ich würde mir einfach ein WinForms/WPF Projekt erstellen, das fenster verstecken
und nur ein trayicon anzeigen. die paar kb speicher für ein fenster schaden heute keinem rechner mehr :)

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private NotifyIcon _myTrayIcon;

        public Form1()
        {
            InitializeComponent();
            _myTrayIcon = new NotifyIcon();
            _myTrayIcon.Icon = ((System.Drawing.Icon)(WindowsFormsApplication1.Properties.Resources.colorselector));
            _myTrayIcon.Text = "Show/Hide";
            _myTrayIcon.Visible = true;
            _myTrayIcon.ContextMenu = _getMenu();
        }

        private ContextMenu _getMenu()
        {
            ContextMenu outp = new ContextMenu();
            MenuItem show = new MenuItem();
            MenuItem hide = new MenuItem();

            show.Text = "Zeige Fenster";
            show.Click += new EventHandler(_showWindow);
            hide.Text = "Verstecke Fenster";
            hide.Click += new EventHandler(_hideWindow);

            outp.MenuItems.Add(show);
            outp.MenuItems.Add(hide);

            return outp;
        }

        private void _showWindow(object sender, EventArgs e)
        {
            Show();
        }

        private void _hideWindow(object sender, EventArgs e)
        {
            Hide();
        }
    }
}


edit : WindowsFormsApplication1.Properties.Resources.colorselector ist ein kleines icon für die traybar

_________________
Zitat MDSN : " ... C# (gesprochen: "si scharp") " :D
mokus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

Win 7 Pro.
C#, VS 2010
BeitragVerfasst: So 28.12.08 15:22 
Ja danke, dass hilft schon einbisschen weiter, nur wie lasse ich das Fenster gleich nach dem Starten des Programmes verstecken.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 28.12.08 16:58 
Hallo,

ich habe mir nicht genauer angesehen, was und wie Du arbeiten willst, aber vielleicht hilft Dir das Vorgehen im [Snippet] Vorlage für Tray-/NotifyIcon-Anwendung.

Gruß Jürgen
mokus Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

Win 7 Pro.
C#, VS 2010
BeitragVerfasst: So 28.12.08 17:15 
So habs jetzt einfach so gemacht, jetzt läuft es im Hintergrund ohne das man irgendwie bemerkt ausser bei den Prozessen.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
    static class Program
    {

        public static void Main()
        {
            
            Timer ProgramTimer = new Timer();

            ProgramTimer.Interval = 1000;
            ProgramTimer.Enabled = true;
            ProgramTimer.Tick += new EventHandler(Timer_Tick);

            Application.Run();
            
        }

        private static void Timer_Tick(object sender, EventArgs e)
        {
            // Inhalt
        }
    }