【发布时间】:2012-08-20 22:14:32
【问题描述】:
我有一个生成 dll 的 WinForms 控件项目。还有一个使用第一个项目的第二个 dll 项目(也是 winforms 控件)。还有第三个 winforms 项目,这次是一个表单,它使用第二个项目。所以[第三个项目] -----> [第二个项目] --------> [第一个项目]
第一个项目公开一个静态事件。我正在尝试从第三个项目订阅该事件。在 += 调用之后,该事件保持为空(不是订阅)。
为什么不订阅?是因为 Winforms 控件有自己的线程吗? FirstProject 用户控件是在某个时间点动态创建的。但我希望静态能够正常工作,而无需做任何其他事情,
项目 1
namespace Something
{
public partial class FirstClass : UserControl
{
...
public delegate void EventHandler();
public static event EventHandler MyEvent;
...
}
}
项目 3
namespace Another
{
public partial class ThirdClass : Form
{
...
public ThirdClass()
{
....
Something.FirstClass.MyEvent += new Something.FirstClass.EventHandler(MyHandler);
}
public void MyHandler()
{
}
...
}
}
编辑 我创建了一个小型应用程序,其中包含获取三个项目和静态事件的基础知识。它有效。因此正在发生其他事情。
编辑 2 包含第一个项目的 dll,即带有事件的项目,被加载了两次。我刚刚添加了一个别名,但没有帮助。并且仍然不会解释在 += 之后事件仍然为空。
EDIT 3 我转换了事件,所以我有了添加/删除访问器对。它确实进入了添加。 Handler方法正确获取值(因此不为null),但一旦超出,又为null。
【问题讨论】:
-
你的项目 3 的 ctor 运行了吗?尝试在注册码处设置断点并检查它是否已运行。从您提供的信息中,我看不出为什么它不应该起作用。
-
它确实有效。我确实把断点放在那里。这就是我发现 += 不起作用的原因