Verallgemeinerungsproblem bei Delegates



  • Hmm die Lösung von hajb hat mir zwar die Compilerfehler beseitigt, aber ich erziele nicht das gewünschte Ergebnis.
    Hier nochmal die Aktuelle Struktur.

    class Client : ISessionable
        {
            private Timer timer;
    
            public void test(object sender, EventArgs e)
            {
                Console.WriteLine("Sessionmanager worked");
            }
    
            #region ISessionable Members
    
            public void InitSessionTimer(Timer timer,EventHandler handler)
            {
    
                this.timer = timer;
                this.timer.Interval = 1000;
                timer.Tick += handler;
            }
    
            public void StartSession()
            {
                this.timer.Start();
            }
    
            public void StopSession()
            {
                this.timer.Stop();
            }
    
            #endregion
        }
    
    class Program
        {
            static void Main(string[] args)
            {
    
                Client cl = new Client();
                Session sess = new Session(new SessionObject(cl));
    
                sess.StartSessionManagment(cl, new Timer(), cl.test);
                Console.ReadKey();
            }
    
        }
    

    So normaler Weiße sollte doch jetzt aller 1sec auf der Konsole "SessionManager worked" ausgegeben werden, oder irre ich mich?



  • Mit dem Timer aus System.Windows.Forms benötigst Du einen Message Loop, den hast Du aber nicht.

    Benutze System.Threading.Timer und Du benötigst keine Message Loop mehr.

    Simon



  • Ausserdem:
    Falls der Client nur einen Delegaten (den den Du bei InitSessionTimer mitgibst) hat und aufruft, kannst Du dein Tick Event auch intern im Client abbonieren, den Delegaten (was auch immer für einer, da bist Du frei in der Signatur) in Client als Member speichern und dann im Tick Handler diesen Delegaten aufrufen.

    Falls mehrere Delegaten sich anmelden können, empfehle ich einfach dem Client ein Event zu verpassen.

    Simon



  • @theta: Da haste natürlich recht.Problem beim system.Threading.Timer ist das man bei diesem keinen Tick-Event anmelden kann. Zumindest habe ich sowas nich gefunden, kannste da vielleicht mal zeigen was du meinst?



  • Was genau soll ich zeigen?
    Die Benutzung von System.Threading.Timer? Es gibt bei MSDN ein Bsp.

    Simon



  • Nein ich meinte, ob/wie man an einem System.Threading.Timer ein Event anmelden kann, weil soweit ich gesehen habe, gibt es da kein Tick-Event.



  • Dafür ein Callback Delegat (wird beim CTOR übergeben).
    Simon



  • Ok gut das hab ich hinbekommen, nun eine wesentlich wichtigere Frage, wie kann ich das Ding starten?Die MSDN ist da nicht gerade sehr aussagekräftig.Eine .Start() Methode gibts da ja nicht.Oder wird der automatisch beim Erzeugen gestartet?



  • Ja. Lies doch msdn mal ein wenig genauer....



  • Ja ok habs gefunden 😃
    Er wird eingeschaltet sobald ich ihn erzeuge.


Anmelden zum Antworten