私のプログラムには、 と の 2 つのフォームがformLoginありformStudentます。はformLogin、 という外部クラスを介してサーバーに接続されていますConnection。に接続を渡し、 をformStudent表示してformStudentを非表示にしようとしていformLoginます。このConnectionクラスにはフォーム用の 2 つのコンストラクターがあるため、どこにでもフォームの新しいインスタンスを作成せず、フォームを継承します。
クラスから呼び出そうとしたメソッドConnectionで、コメントに示されているエラーが表示されます。
public void SuccessfulLogin()
{
if (this.InvokeRequired)
{
this.Invoke(new Action(() => SuccessfulLogin()));
/*
**Invoke or BeginInvoke cannot be called on a control until the window
handler has been created**
*/
}
else
{
formStudent.connection = formLogin.newConnection;
formLogin.Hide();
formStudent.Show();
}
}
ステートメントを追加ifしてハンドルが作成されているかどうかを確認しようとしましif (IsHandleCreated)たが、ブレーク ポイントを使用すると、メソッド内のコードがまったく実行されていないように見えます。formLoginまた、変更なしで、クラスとクラスの両方にこのメソッドを配置しようとしましたConnection。
アップデート:
私を正しい方向に向けてくれたKing Kingに感謝します。コードを次のように変更しました。
this.CreateHandle();
this.Invoke(new MethodInvoker(SuccessfulLogin));
そしてsucessfulLoginこれへの方法:
public void SuccessfulLogin()
{
if (this.InvokeRequired)
{
this.Invoke(new Action(() => SuccessfulLogin()));
}
else
{
formStudent = new frmStudent();
formStudent.connection = formLogin.newConnection;
formLogin.Hide();
formStudent.Show();
}
}