C# EventHandler: как работать с EventHandler в клиентском приложении? - PullRequest
0 голосов
/ 01 февраля 2020

Я написал библиотеку классов (dll), которая обрабатывает телефонные звонки. В этой библиотеке классов есть делегаты, которые обрабатывают события телефонных звонков, такие как OnCallReceived, OnHoldCall et c.

Итак, теперь я хочу добавить эту библиотеку классов в мое приложение Windows Forms и иметь возможность обрабатывать события Phone Call (OnCall, OnHolde et c) в моем приложении Windows Forms. Как этого добиться?

Например

//My Class Library

Class Test
{
   ThirdParyLibrary tpl

   public Test()
   {
      tpl= new tpl();
      tpl.OnReceiveCall += Handler(OnReceiveCall);     
   }

   public void OnReceiveCall()
   {
      //i want this event to take place in client app
   }  
}

//My Windows Forms App

Client App

public main()
{
   Test t =new Test()
   //i want OnReceiveCall to be processed here
   //t.OnReceiveCall
   {
      Message.Show('You received a call');
   }
}

1 Ответ

1 голос
/ 02 февраля 2020

// я хочу, чтобы это событие происходило в клиентском приложении

Поскольку вы хотите, чтобы механизм обработки событий происходил в приложении Client , которое я предположим, что это еще один Class, содержащий Main, я создал небольшую консоль, которая воспроизводит сценарий проблемы


также загружен на скрипку

using System;

namespace Test
{
    public class ThirdPartyLibrary
    {
        public delegate void dEeventRaiser();
        public event dEeventRaiser OnReceiveCall;
        public string IncomingCall(int x)
        {

            if (x > 0 && OnReceiveCall != null)
            { OnReceiveCall(); return "Valid "+x.ToString(); }
            return "Invalid"+x.ToString();
        }
    }



    public class EventSubscription
    {

        public EventSubscription()
        {
            ThirdPartyLibrary a = new ThirdPartyLibrary();
            a.OnReceiveCall += HandleTheCall;
            var iAnswer = a.IncomingCall(24198724);
            Console.WriteLine("Call received from "+iAnswer);
        }

        public virtual void HandleTheCall()
        {
            Console.WriteLine("Default way I handle the call");
        }

    }

    public class Program : EventSubscription
    {
        public override void HandleTheCall()
        {
            Console.WriteLine("Override sucessful, new way to handle the call ");
        }

       static void Main(string [] args)
        {

          Program pb = new Program();  // Control goes EnventSubscription constructor as it is derived 
            Console.Read();
        }

    }
}

Выход :

enter image description here

...