我有一个类“Blackbox”,它代表一个与我所在实验室周围的各种机器通信的盒子。这个类是由其他人编写的,所以我看不到它的内部是如何工作的。
我通常使用 Blackbox 类的方式是构造一个 Blackbox 对象,连接到物理盒子,然后添加一个监听器方法,如下所示:
Blackbox b = new Blackbox("192.168.0.2");
b.messageReceived += myFunction;
然后在同一个班级,我通常有类似的东西
private void myFunction(string s)
{
// do something with s
}
这通常可以正常工作,每当黑盒从机器收到消息时,它都会使用我可以处理的字符串调用 myFunction。
现在,当我尝试将黑盒传递给另一个表单时出现问题,示例代码如下(我正在编写代码以尝试最小化(我认为是)不相关的细节。希望我现在终于成功了那。):
static class Program
{
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Blah());
}
}
class Blah : Form {
public Blah()
{
InitializeComponent();
Blackbox b = new Blackbox("192.168.0.2");
MyDialog md = new MyDialog(b);
md.ShowDialog();
}
}
class MyDialog : Form
{
private Blackbox b;
public MyDialog(BlackBox b) : this()
{
this.b = b;
b.messageReceived += myNewFunction;
}
private void myNewFunction(string s)
{
// this function never ends up being called
}
}
在这里创建了对话框,除了事件侦听器之外几乎所有东西都可以工作。我可以使用其他 Blackbox 函数(例如 b.sendMessage())在 MyDialog 中正常发送机器消息。有谁知道为什么会这样?
此外,如果我在 MyDialog 中执行以下操作:b.messageReceived("test"),myNewFunction("test") 最终会被调用。好像有两个 Blackbox 对象以某种方式创建。这可能是由于 Blackbox 的实现,还是有更基本的 C# 原因?
谢谢你的时间。