我有一个在某些时候打开 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();
}
我面临的问题是 StartForm 保持打开状态,直到 StartTestHandler 的工作完全完成。在 StartTestHandler 中,另一个表单打开了实际测试。
有没有办法强制 StartForm 关闭而不等待测试完成?
编辑
正如@cowboydan 建议的那样,我已经使用 BeginInvoke 来显示表单。但是,在它正常工作之前,我必须为 StartForm 以及实际的 TestForm 这样做。
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();
});
}