检测表单何时关闭c#

jkh*_*jkh 13 c# events event-handling winforms

我有一个我创建的WinForm,它显示一个带按钮的提示.这是一个自定义的WinForm视图,因为消息框对话框还不够.

我有一个后台工作人员开始运行.aBackgroundWorker.IsBusy如果单击myForm上的按钮,我也想退出while()循环.

//MyProgram.cs

using(CustomForm myForm = new CustomForm())
{
    myForm.Show(theFormOwner);
    myForm.Refresh();

    while(aBackgroundWorker.IsBusy)
    {
        Thread.Sleep(1);
        Application.DoEvents();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,在CustomForm这次Button_clicked活动中,我有

//CustomForm.cs

private void theButton_Click(object sender, EventArgs e)
{
  this.Close();
}
Run Code Online (Sandbox Code Playgroud)

我是否需要向CustomForm类或我声明和初始化表单的位置添加更多代码以便能够检测到闭包?

com*_*ech 25

要检测窗体何时实际关闭,您需要挂钩FormClosed事件:

    this.FormClosed += new FormClosedEventHandler(Form1_FormClosed);

    void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        // Do something
    }
Run Code Online (Sandbox Code Playgroud)

或者:

using(CustomForm myForm = new CustomForm())
{
    myForm.FormClosed += new FormClosedEventHandler(MyForm_FormClosed);
    ...
}

void MyForm_FormClosed(object sender, FormClosedEventArgs e)
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)


Dra*_*rat 5

你可能会过度杀戮.要显示类似对话框窗口的表单并在将控制权返回给调用表单之前等待它退出,只需使用:

mySubForm.ShowDialog();

这将"阻止"主要形式直到孩子关闭.