在举办活动后关闭表格

时间:2012-12-16 11:51:23

标签: winforms events c#-4.0 delegates

我有一个mainform,可以在某个时刻打开一个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();
    });
}

1 个答案:

答案 0 :(得分:1)

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