2 つのフォームと 1 つのシングルトン クラスがあります。formAのbtn_A_Clickでシングルトンクラスを初期化しています。
public partial class frmA : Form
{
public frmA()
{
InitializeComponent();
frmB frmB;
}
private void btn_A_Click(object sender, EventArgs e)
{
SessionMgmt.GetInstance().StartFormB();
}
}
これは私のシングルトン クラスで、ここでは Forms.Invoke() メソッドを使用しようとしています。
public class SessionMgmt
{
static SessionMgmt _sessinMgr;
frmB frB;
private SessionMgmt()
{
frB = new frmB();
}
public static SessionMgmt GetInstance()
{
if (_sessinMgr != null)
return _sessinMgr;
else
{
_sessinMgr = new SessionMgmt();
return _sessinMgr;
}
}
public bool StartFormB()
{
frB.Invoke(new EventHandler(DisplayFrmB));
return true;
}
private void DisplayFrmB(Object o, EventArgs e)
{
frB.Visible = true;
frB.Refresh();
}
}
これが私のformBです。
public partial class frmB : Form
{
}
ただし、frB.Invoke(new EventHandler(DisplayFrmB));
メソッドから次の例外がスローされます。
ウィンドウ ハンドルが作成されるまで、Invoke または BeginInvoke をコントロールで呼び出すことはできません。
問題がわかりません。何か見落としがある場合は、助けてください。
編集
次の構造は、現在のプロジェクトが次のフォームを表示する方法です。それは VB.NET によって行われ、C# を使用する新しいプロジェクトで同様の種類のものを使用する必要があります。イベントを指してから関数を指す Invoke 関数を見ました。その関数では、Form.Visible=true と Form.Refresh を作成するだけです。しかし、理解するために、POcを試して同じ手順を実行しましたが、まだ解決されていません。