0

我创建了一个需要登录并连接到数据库的应用程序 (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::Invoke”的垃圾收集委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。将委托传递给非托管代码时,托管应用程序必须使它们保持活动状态,直到保证它们永远不会被调用。

我一直在对这个错误进行一些研究,我认为它与被垃圾收集的委托或委托的生命周期有关......我已经尝试了很多东西,但我似乎无法摆脱这个错误。有想法该怎么解决这个吗?

4

0 回答 0