Пользовательское событие не возникает в EventHandler .NET CORE

Используя ядро ​​.net, я внедряю библиотеку классов для отправки массовых писем на почтовый сервер. Почтовый сервер использует мой список электронной почты и выдает обратную связь после завершения. Это займет 20-30 секунд. Когда я получаю обратную связь от почтового сервера, мне нужно запустить метод.

Я отослал эту статью для реализации обработчика событий. Но когда я отлаживаю его

EventHandler OnFeedbackReceived

параметр является нулевым. см. изображение ниже

Это код библиотеки классов.

using System;
using System.Text;
using Newtonsoft.Json;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Collections.Generic;


namespace OSH_EmailServerLibrary
{
    public static class EmailMQServerLibrary
    {        
         public static event EventHandler<EmailFeedbackEventArgs> OnFeedbackReceived;

        public static void PushToMQ(List<EmailMessage> _emailList)
        {           
        
        //
        // Long RabbitMQ msg push code here
        //             
        
         EmailMessageFeedback feedback = new EmailMessageFeedback { Description = "Completed", SuccessCount = 10, FailedCount = 0 };
         SendFeedback(feedback);
         Console.ReadLine();
        }
       
        private static EmailMessageFeedback SendFeedback(EmailMessageFeedback feedback)
        {
            if (OnFeedbackReceived != null)
            {
                OnFeedbackReceived(feedback, new 
                EmailFeedbackEventArgs(feedback));
            }
            return feedback;
        }
    }

    public class EmailFeedbackEventArgs : EventArgs
    {
        public EmailFeedbackEventArgs(EmailMessageFeedback _feedback)
        {
            feedback = _feedback;
        }
        public EmailMessageFeedback feedback { get; set; }
    }
}

Вот как я использую его в консольном приложении

using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;
using OSH_EmailServerLibrary;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;

namespace EmailServerSenderSampleConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            List<EmailMessage> _emailList = _emails.GetAllEmailToSend();
            
            EmailMQServerLibrary.PushToMQ(_emailList);
            EmailMQServerLibrary.OnFeedbackReceived += EmailMQServerLibrary_OnFeedbackReceived;

        } 

        private static void EmailMQServerLibrary_OnFeedbackReceived(object sender, EmailFeedbackEventArgs e)
        {
          
        }    
    }
}

1 ответ

Наконец-то исправили мою проблему. Вопрос не был в моей библиотеке классов. Вопрос был в том, что я подписался на событие после PushToMQ() в моем консольном приложении, что неправильно. Спасибо вам большое @Hans Passant, помогая мне.

Вот мой исправленный ответ. Я думаю, что это поможет другим, как я.

Библиотека классов >>

using System;
using System.Text;
using Newtonsoft.Json;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;
using System.Collections.Generic;


namespace OSH_EmailServerLibrary
{
    public static class EmailMQServerLibrary
    {        
         public static event EventHandler<EmailFeedbackEventArgs> OnFeedbackReceived;

        public static void PushToMQ(List<EmailMessage> _emailList)
        {           
        
        //
        // Long RabbitMQ msg push code here
        //             
        
         EmailMessageFeedback feedback = new EmailMessageFeedback { Description = "Completed", SuccessCount = 10, FailedCount = 0 };
         SendFeedback(feedback);
         Console.ReadLine();
        }
       
        private static EmailMessageFeedback SendFeedback(EmailMessageFeedback feedback)
        {
            if (OnFeedbackReceived != null)
            {
                OnFeedbackReceived(feedback, new 
                EmailFeedbackEventArgs(feedback));
            }
            return feedback;
        }
    }

    public class EmailFeedbackEventArgs : EventArgs
    {
        public EmailFeedbackEventArgs(EmailMessageFeedback _feedback)
        {
            feedback = _feedback;
        }
        public EmailMessageFeedback feedback { get; set; }
    }
}

Консольное приложение >>

using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;
using OSH_EmailServerLibrary;
using RabbitMQ.Client;
using RabbitMQ.Client.Events;

namespace EmailServerSenderSampleConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            List<EmailMessage> _emailList = _emails.GetAllEmailToSend();
            
             EmailMQServerLibrary.OnFeedbackReceived +=
             EmailMQServerLibrary_OnFeedbackReceived; //-- worked
             EmailMQServerLibrary.PushToMQ(_emailList);
             //EmailMQServerLibrary.OnFeedbackReceived +=
             EmailMQServerLibrary_OnFeedbackReceived; -- Not working like this

        } 

        private static void EmailMQServerLibrary_OnFeedbackReceived(object sender, EmailFeedbackEventArgs e)
        {
          
        }    
    }
}

Другие вопросы по тегам