ある時点でStartFormを開くメインフォームがあります。
private void TestChosen(object sender, TestChosenEventArgs e)
{
var frm = new TestStartForm(e.Test, StartTest);
frm.ShowDialog();
}
このStartFormには、実際にテストを開始するためのボタンがあります。
public TestStartForm(Test test, StartTestHandler startTestHandler)
{
InitializeComponent();
_test = test;
OnStartTest = startTestHandler;
}
public delegate void StartTestHandler(object sender, StartTestEventArgs e);
public event StartTestHandler OnStartTest;
public void InvokeOnStartTest(StartTestEventArgs e)
{
StartTestHandler handler = OnStartTest;
if (handler != null) handler(this, e);
}
private void btnStart_Click(object sender, EventArgs e)
{
InvokeOnStartTest(new StartTestEventArgs(_test));
Close();
}
私が直面している問題は、StartTestHandlerの作業が完全に完了するまでStartFormが開いたままになることです。StartTestHandlerで、実際のテストで別のフォームが開かれます。
テストが終了するのを待たずにStartFormを強制的に閉じる方法はありますか?
編集
@cowboydanが提案したように、フォームを表示するためにBeginInvokeを使用しましたが、正しく機能する前に、実際のTestFormだけでなくStartFormに対しても実行する必要がありました。
private void TestChosen(object sender, TestChosenEventArgs e)
{
BeginInvoke((Action)delegate
{
var frm = new TestStartForm(e.Test, StartTest);
frm.ShowDialog();
});
}
private void StartTest(object sender, StartTestEventArgs e)
{
BeginInvoke((Action)delegate
{
var frm = new TestForm(e.Test);
frm.ShowDialog();
});
}