Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在对象之间发送、接收和重定向字符串消息_C# - Fatal编程技术网

C#在对象之间发送、接收和重定向字符串消息

C#在对象之间发送、接收和重定向字符串消息,c#,C#,我有一个主类“Template”,它引用了一些处理器“IProcessor” interface IProcessor { void Execute(); } class Template { IProcessor proc1; IProcessor proc2; IProcessor proc3; public Template(IProcessor p1, IProcessor p2, IProcessor p3) { p

我有一个主类“Template”,它引用了一些处理器“IProcessor”

 interface IProcessor
{
    void Execute();
}

class Template
{
    IProcessor proc1;
    IProcessor proc2;
    IProcessor proc3;

    public Template(IProcessor p1, IProcessor p2, IProcessor p3)
    {
        proc1 = p1;
        proc2 = p2;
        proc3 = p3;
    }

    public void Run()
    {
        proc1.Execute();
        proc2.Execute();
        proc3.Execute();
    }
}
每个处理器都需要能够向“模板”类发送字符串消息Template类需要能够将消息重定向到其他对象(可能是Logger或UI)


问题在于“Template”的Run方法()可以在单独的线程中启动,而IProcessor中的消息可以并行生成。Foreach循环。我的决定被整合到生产者/消费者模式实现中,其中使用了BlockingCollection,但我觉得这对于我的问题来说太昂贵了,而且在将到达的消息重定向到其他对象时也有困难。这个问题有标准的解决方案吗?(事件、委托或其他?

您已经提到了一些可能的解决方案:将委托传递给将字符串检索到处理器的方法;当新消息准备就绪时,在处理器中引发事件;让
Template
实现一个接口并将其传递给处理器。最合适的解决方案取决于您的体系结构。为什么您认为使用BlockingCollection会过于繁重,这似乎是自然的解决方案?此外,你所说的“困难”是什么?您需要在某个地方进行一些同步,而阻塞集合是“隐藏”它的好地方。:)收集字符串是一个常见的领域,因此是一个关键部分。我无法理解问题的复杂性。如果您的
模板
需要来自
i处理器
的消息,那么为什么不将
void Execute
更改为
string Execute
或需要传回的任何对象。消息在Execute()方法内部并行生成。Foreach循环,因此我不需要string Execute()。生成的消息被发送到模板,然后重定向到其他对象。