代表:在4层之间传递消息

我以前使用委托在2层之间进行通信,我的基层会发送消息到我的GUI层。之后,我在它们之间又增加了2层,这使得4层难以“互相交谈”。任务类在它自己的线程上运行。代表:在4层之间传递消息

基层(生成消息,并将它们传递向上):

public class APIWrapper 

{

public delegate void UsrMsgDelegate(string msg);

private UsrMsgDelegate UsrMsg;

public void MsgRedirect(UsrMsgDelegate msgHandler)

{

UsrMsg = msgHandler;

}

// Send a message with UsrMsg("message");

}

任务(其中几乎所有的逻辑的完成),生成消息并将它们。

public class Task 

{

public delegate void UsrMsgDelegate(string msg);

APIWrapper base;

public Task(APIWrapper apiWrapper)

{

base = apiWrapper;

}

private UsrMsgDelegate UsrMsg;

public void MsgRedirect(UsrMsgDelegate msgHandler)

{

UsrMsg = msgHandler;

}

// Send a message with UsrMsg("message");

}

TaskManager(我计划添加额外的任务(这将管理所有这些))。这只是将消息传递到GUI

public class TaskManager 

{

public delegate void UsrMsgDelegate(string msg);

APIWrapper base;

Task task;

public Task()

{

base = new APIWrapper();

base.MsgRedirect(this.UsrMsg);

task = new Task(base);

task.MsgRedirect(this.UsrMsg);

}

private UsrMsgDelegate UsrMsg;

public void MsgRedirect(UsrMsgDelegate msgHandler)

{

UsrMsg = msgHandler;

}

}

GUI(所有消息都经过这里)

public partial class Form1 : Form 

{

TaskManager tm;

public Form1()

{

tm = new TaskManager();

tm.MsgRedirect(this.UsrMsg);

}

public delegate void dlgUsrMsg(string Msg);

private void UsrMsg(string Msg)

{

if (InvokeRequired)

{

BeginInvoke(new dlgUsrMsg(UsrMsg), Msg);

return;

}

Debug.WriteLine(Msg);

if (logBox.Text.Length > 20000)

{

logBox.Text.Remove(0, 5000);

}

logBox.Text += Msg + "\r\n";

logBox.Select(logBox.Text.Length, 0);

logBox.ScrollToCaret();

}

}

我不明白为什么它不工作。我收到以下错误:

  1. 错误:最好的重载方法匹配“Task.MsgRedirect(Task.UsrMsgDelegate)”有一些无效参数
  2. 错误:参数1:无法从“TaskManager.UsrMsgDelegate”转换到'Task.UsrMsgDelegate'

有什么问题有什么建议吗?

另外,从设计的角度来看,从Base传递消息到Task,然后将Task中的Base和Task消息传递给TaskManager会更好吗?或者更好地做我现在正在做的事情,这是从Task传递消息到TaskManager,并从Base传递给TaskManager。

谢谢。

回答:

你的MsgRedirect声明如下所示:

public void MsgRedirect(UsrMsgDelegate msgHandler) 

,但你这样调用它:

tm.MsgRedirect(this.UsrMsg); 

其中this.UsrMsg出现是与此配置文件的方法:

private void UsrMsg(string Msg) 

This将是第一个错误的原因。

您也声明了委托:

public delegate void UsrMsgDelegate(string msg); 

三个每个类APIWrapperTaskTaskManager的时间一次。这也可能是编译器混淆的原因 - 因此第二个错误。

以上是 代表:在4层之间传递消息 的全部内容, 来源链接: utcz.com/qa/264527.html

回到顶部