C#:基于其他班级的事件引发班级事件

时间:2020-03-22 09:16:19

标签: c# events delegates

在我的应用程序中,我有一个接口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 :(得分:0)

如果您在同一过程中有两个类,则可以考虑这样显式地链接事件:

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);
    }
}

例如,在这种情况下,anotherEncoderDetectionAction

但是,如果您正在寻找在不同进程中运行的两个不同应用程序之间共享事件的解决方案,那么您可能正在研究进程间通信,例如这篇文章:

Listen for events in another application

上面的示例代码仍然有效,但是在这种情况下,IEncoder是具有IPC支持的实现,例如消息队列侦听器,它在收到消息时引发事件。