Пример #1
0
        private void Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            TimeServerEventArgument argument = new TimeServerEventArgument(DateTime.Now);

            // Crude, but works
            lock (SyncRoot)
            {
                // Temp. Listen-Kopie erzeugen mit ToList() und diese abarbeiten
                foreach (ITimerCallback proxy in ClientCallbacks.ToList())
                {
                    try
                    {
                        proxy.ServerCallback(Environment.MachineName, argument);
                    }
                    catch
                    {
                        // Fehlerhafte aus Original Liste löschen
                        ClientCallbacks.Remove(proxy); // Eigenes lock für diese Methode auch möglich

                        // Weitere Möglichkeit:
                        // 2. Liste mit Fehlerhaften Clients aufbauen, nachher aus Orig.-Liste löschen
                    }
                }
            }
        }
Пример #2
0
 private void TimerCallback_Tick(object sender, TimeServerEventArgument e)
 {
     CurrentTime = e.CurrentTime.ToLongTimeString();
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CurrentTime)));
 }