0

我有一个在某些时候打开 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();
    });
}
4

1 回答 1

1

您可以使用 BeginInvoke,它将在与 ThreadPool 不同的线程中启动 StartForm。这是一种相当普遍的做法。

于 2012-12-16T11:53:32.943 回答