C#: поднять событие в базах классов на событие в другом классе - PullRequest
0 голосов
/ 22 марта 2020

В моем приложении есть интерфейс IEncoder с событием EncoderCaller.

public interface IEncoder
{
    event EncoderCaller EncoderCalled;
}

public  delegate void EncoderCaller(object Source, EventArgs args);

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

public class VideoEventArgs : EventArgs
{
    public Video xVideo { get; set; }
}


public class DetectionAction : IEncoder
{
    public event EncoderCaller EncoderCalled;

    public void Encode(Video video)
    {
        //some logic to encode video

        OnVideoEncoded();
    }

    protected virtual void OnVideoEncoded()
    {
        if (EncoderCalled != null)
            EncoderCalled(this, EventArgs.Empty);

    }
}

public class Client1: IEncoder
{

}

Мне нужен какой-то механизм, с помощью которого я смогу поделиться контрактом, если он реализован любым клиентом, тогда событие вызовет событие в моем классе DetectionAction.

Может кто-нибудь сказать мне, правильно ли я поступаю.

Как это можно сделать?

1 Ответ

0 голосов
/ 23 марта 2020

Если у вас есть два класса в одном и том же процессе, вы можете явно рассмотреть цепочку событий, например:

public class Client1 : IEncoder
{
    public event EncoderCaller EncoderCalled;

    public Client1(IEncoder anotherEncoder)
    {
        // Listen to event raised on another instance and raise event on this instance.
        anotherEncoder.EncoderCalled += OnAnotherEncoderCalled;
    }

    private void OnAnotherEncoderCalled(object source, EventArgs args)
    {
        if (EncoderCalled != null)
            EncoderCalled(this, EventArgs.Empty);
    }
}

В этом случае, например, anotherEncoder равно DetectionAction.

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

Прослушивание событий в другом приложении

И приведенный выше пример кода все еще работает, но IEncoder в этом случае является реализацией с поддержкой IP C, например, прослушиватель очереди сообщений, который вызывает событие при получении сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...