我是相当新的C#,并正在对AA的方式,实行动态GUI至极采用串行通信。 我最初从C,所以函数指针的概念很熟悉。
Basicly我希望在serial命令已被处理调用answerFunction()函数。 从理论上说:我这是动态地在运行时创建的类lbl_txtBox_Pair。 我有一个类comObject与串行端口进行通信。 我有一个三等comPacket持有关于一个串行命令所有信息。
- 在类lbl_txtBox_Pair的对象我实例化一个数据包,并告诉它该功能,当串行命令完成应该叫。
- 我给包对象的实例comObject。
- beeing处理后的comObject想要通过调用存储在包对象委托以信号通知分组的原始发送者。
出于某种原因,我无法得到它的工作。 它告诉我,包的属性是不可调用的。 我做得不对teribly?
这里是代码:先在班“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(分组); 不会执行,并表示它不能被称为方法。
任何人都可以看到它错在何处? 我觉得好像委托失去它是代表什么的信息。 ;)或者,我必须完全地重新调整使用其他类型的回调/事件方法的代码?