Thursday, September 27, 2018

C#, Delegates, Events - Simple Event Example Reminder

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace Event
{
    class Program
    {
        static void Main(string[] args)
        {
            var video = new Video(){ Title = "Video 1"};
            var videoEncoder = new VideoEncoder(); //publisher
            var mailService = new MailService(); //subscriber
            videoEncoder.VideoEncoded += mailService.OnVideoEncoded;
            videoEncoder.Encode(video);
        }
    }
    //Should in this case be event sender...
    public class VideoEncoder
    {
        //Step 1 - Define a delegate
        public delegate void VideoEncodedEventHandler(object source, EventArgs args);
        //Step 2 - Define A event.
        public event VideoEncodedEventHandler VideoEncoded;
       
        public void Encode(Video video)
        {
            Console.WriteLine("Encoding video...\n");
            Thread.Sleep(3000);
            //Step 3 - Raise the event
            OnVideoEncoded(this);
        }

      
        protected virtual void OnVideoEncoded(object source)
        {
            VideoEncoded?.Invoke(source, EventArgs.Empty);
        }
    }

  

    public class Video
    {
        public string Title { get; set; }
    }

    public class MailService
    {
        public void OnVideoEncoded(object source, EventArgs e)
        {
            Console.WriteLine("MailService is Mailing!");
        }
    }
}

No comments:

Post a Comment