我对 C# 相当陌生,正在研究一种使用串行通信来实现动态 GUI 的方法。我是C出身,所以函数指针的概念很熟悉。
基本上我想在处理串行命令时调用answerFunction() 函数。
理论上:
我有一个类 lbl_txtBox_Pair ,它是在运行时动态创建的。
我有一个与串行端口通信的 comObject 类。
我有一个第三类 comPacket,它保存有关一个串行命令的所有信息。
- 在 lbl_txtBox_Pair 类的对象中,我实例化一个数据包并告诉它串行命令完成后应调用哪个函数。
- 我将数据包对象赋予 comObject 实例。
- 处理后,comObject 希望通过调用存储在数据包对象中的委托来向数据包的原始发送者发出信号。
由于某种原因我无法让它工作。它告诉我数据包的属性不可调用。我做错了什么吗?
这是代码:
首先是“lbl_txtBox_Pair”类中的代码。我在这里创建 comPacket 并将其交给 comObject。
public delegate void answerHandler( comPacket packet);
public void txb_value_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Return)
{
answerHandler answerMethod = new answerHandler(this.processAnswer);
comPacket question = new comPacket(this.command, answerMethod, 1);
comObject.addPacket(question);
}
}
comPacket 的构造函数。此处存储委托以供稍后调用。
public Delegate answerFunction;
public comPacket(string cmd, Delegate func, int prio)
{
this.cmd = cmd;
answerFunction = func;
this.prio = prio;
}
在 comObject 中,数据包得到处理。完成后我想调用数据包中存储的函数。顺便说一句,comObject 在不同的线程中运行。
if (this.isEndtocken(inputline))
{
listen = false;
packet.answerFunction(packet);
}
这就是它破裂的地方。 packet.answerFunction(packet);不会执行并表示它不能作为方法调用。
有人能看出哪里出了问题吗?我认为委托人似乎丢失了它是委托人之类的信息。
或者我是否必须完全重构代码才能使用其他类型的回调/事件方法?