Пример #1
0
        private void TimerCounter()
        {
            Thread.Sleep(Time);
            MailInfo mailInfo = new MailInfo()
            {
                From    = "Timer",
                To      = "User",
                Message = "Timer finished work"
            };

            NewMail?.Invoke(this, mailInfo);
            timerThread.Abort();
        }
Пример #2
0
        //Step 3:
        //Method Responsible for Raising Event (Notify registered objects that event occurred)
        //by convention protected virtual void (so inheritance is possible, if class is sealed - private, nonvirtual)
        protected virtual void OnNewMail(MailEventArgs e)
        {
            //variant 1
            //not thread safe
            //if (NewMail != null) NewMail(this, e);

            //variant 2
            //Thread safe in theory but compiler could optimize it
            //EventHandler<MailEventArgs> TempNewMail = NewMail;
            //if (TempNewMail != null) TempNewMail(this, e);

            //variant 3
            //according to Rihter
            //EventHandler<MailEventArgs> TempNewMail = Volatile.Read(ref NewMail);
            //if (TempNewMail != null) TempNewMail(this, e);

            //variant 4
            //according to C#6.0 - it is thread safe
            NewMail?.Invoke(this, e);
        }
Пример #3
0
 public virtual void OnNewMail(NewMailEvent e)
 {
     NewMail?.Invoke(this, e);
 }
Пример #4
0
 /// <summary>
 /// Notifies all subscrbers.
 /// </summary>
 protected virtual void OnNewMail(DataEventArgs info) =>
 NewMail?.Invoke(this, info);
Пример #5
0
 protected virtual void OnNewMail(MailMessage mail)
 {
     NewMail?.Invoke(mail);
 }
Пример #6
0
 /// <summary>
 /// Notifies all observers.
 /// </summary>
 protected virtual void OnNewMail(WeatherInfoEventArgs info)
 {
     NewMail?.Invoke(this, info);
 }
Пример #7
0
 protected virtual void OnNewMail(NewMailEventArgs e)
 {
     NewMail?.Invoke(this, e);
 }