我创建了一个需要登录并连接到数据库的应用程序 (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”的垃圾收集委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。将委托传递给非托管代码时,托管应用程序必须使它们保持活动状态,直到保证它们永远不会被调用。
我一直在对这个错误进行一些研究,我认为它与被垃圾收集的委托或委托的生命周期有关......我已经尝试了很多东西,但我似乎无法摆脱这个错误。有想法该怎么解决这个吗?