我对C#相当陌生,并且正在开发一种实现动态GUI的方式,这种方式使用串行通信。我最初来自C,所以函数指针的概念很熟悉。存储/传递代表作为变量
基本上,我想在串行命令处理完成后调用answerFunction()函数。 理论上: 我有一个在运行时动态创建的类lbl_txtBox_Pair。 我有一个与串行端口通信的comObject类。 我有第三类comPacket,它包含有关一个串行命令的所有信息。
- 在类对象中的lbl_txtBox_Pair我实例化一个包并告诉它当串行命令完成时应该调用哪个函数。
- 我将包对象赋给comObject实例。
- 经过beeing处理后,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(分组);不会执行,并说它不能被称为方法。
任何人都可以看到它出错哪里?我认为,代表似乎认为这是一个委托或某事的信息。 ;) 或者我必须完全重构代码才能使用其他类型的回调/事件方法?
这是编译器消息还是运行时失败?你能否发布你正在收到的确切消息? – Vlad
顺便说一句,如果'funk'只是'Delegate',你不能用参数调用它。也许你需要'answerHandler'来代替? (在'comPacket'内) – Vlad