gpt4 book ai didi

c# - 静态事件未在不同的 dll 中订阅

转载 作者:行者123 更新时间:2023-11-30 18:37:58 26 4
gpt4 key购买 nike

我有一个生成 dll 的 WinForms 控件项目。有第二个dll项目(也是winforms控件)使用了第一个项目。还有第三个 winforms 项目,这次是使用第二个项目的表单。所以 [第三个项目] <>------> [第二个项目] <>--------> [第一个项目]

第一个项目公开了一个静态事件。我正在尝试从第三个项目订阅该事件。 += 调用后事件保持为 null(不是订阅)。

为什么不订阅?是因为 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 被加载了两次。我刚刚添加了一个别名,但没有帮助。并且仍然不会解释在 += 之后事件仍然为 null 的时间。

EDIT 3 我转换了事件,所以我有添加/删除访问器对。它确实进入了添加。 Handler 方法正确获取值(因此没有 null),但一旦它超出范围,就再次为 null。

最佳答案

静态事件应该可以正常工作。尝试调试您的代码以确保正在调用事件注册并且事件本身按预期被触发。该事件不关心线程。无论哪种方式,它都会接受注册。但是,如果您尝试在除 UI 线程之外的线程上编辑表单,线程将导致异常。

关于c# - 静态事件未在不同的 dll 中订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12045980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com