我创建了一个需要登录并连接到数据库的应用程序(C#)。该应用程序由多个用户控件组成,这些控件是主窗体的一部分。
namespace aNameSpace
{
public partial class Login : UserControl
{
public delegate void LoginPressed(MySqlConnection connection, string userName);
public event LoginPressed successfulLogin;
...
private void button_Login_Click(object sender, EventArgs e)
{
...
successfulLogin(connection, textBox_UserName.Text);
}
我将此控件添加到主窗体并使用LoginPressed事件。
public partial class form_Main : Form
{
public form_Main()
{
...
Login loginControl = tabControls[login] as Login;
loginControl.successfulLogin += new Login.LoginPressed(login_successfulLogin);
}
它成功登录并完全正常,直到我关闭应用程序,然后我得到此异常。
检测到CallbackOnCollectedDelegate消息:进行了回调 在垃圾收集的类型委托上 'System.Windows.Forms的!System.Windows.Forms.NativeMethods +的WndProc ::调用'。 这可能会导致应用程序崩溃,损坏和数据丢失。什么时候 将代理传递给非托管代码,他们必须保持活着 管理应用程序,直到它保证永远不会 调用。
我一直在研究这个错误,我认为这与代表被垃圾收集有关,或者与委托的生命周期有关......我已经尝试了很多东西,我可以'似乎摆脱了这个bug。有想法该怎么解决这个吗?