ログインが必要でデータベースに接続するアプリケーション (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' のガベージ コレクション デリゲートでコールバックが行われました。これにより、アプリケーションのクラッシュ、破損、データ損失が発生する可能性があります。デリゲートをアンマネージ コードに渡す場合、デリゲートが呼び出されないことが保証されるまで、マネージ アプリケーションによって保持される必要があります。
私はこのエラーについていくつかの調査を行ってきましたが、デリゲートがガベージコレクションされているか、デリゲートの寿命に関係していると思います...たくさんのものを試しましたが、うまくいかないようですこのバグを取り除きます。これを修正する方法についてのアイデアはありますか?