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