在 c# 中发生来自另一个类的事件后执行代码的最佳方法

本文关键字:事件 执行 代码 方法 最佳 另一个 | 更新日期: 2023-09-27 18:35:14

假设我们有form A有一个按钮"运行向导"。单击此按钮将打开一个向导以创建某些内容。此向导是从另一个项目导入的,该项目形成 A 引用。向导在其工作期间会创建多个数组。

这是单击按钮的代码:

private void buttonOpenWizard_Click(object sender, EventArgs e)
        {
            SampleWizard wizard = new SampleWizard();
            wizard.Show();
            //(theoretical code using arrays created by the wizard)
        }
等待向导完成

,并在完成向导任务后才运行理论代码的最佳方法是什么?

在 c# 中发生来自另一个类的事件后执行代码的最佳方法

由于您似乎不介意阻止,请使用ShowDialog

private void buttonOpenWizard_Click( object sender, EventArgs e )
{
    SampleWizard wizard = new SampleWizard();
    if( wizard.ShowDialog() == DialogResult.OK ) // this line will block until the wizard form is closed
    {
        // and any code here will not run until that has happened
    }
}

通常,使用ShowDialog调用的返回值来指示用户是否完成了向导/对话框。在这种情况下,我无法知道该表单是否使用它,但在这里我假设它确实如此。

如果您不想阻止,您应该能够执行以下操作:

private void buttonOpenWizard_Click( object sender, EventArgs e )
{
    SampleWizard wizard = new SampleWizard();
    wizard.FormClosed += WizardClosed; // hook up event handler
    wizard.Show();
}
private void WizardClosed( object sender, FormClosedEventArgs e )
{
    var wizard = (SampleWizard)sender;
    // check and use result of wizard here
}
private void buttonOpenWizard_Click(object sender, EventArgs e)
    {
        SampleWizard wizard = new SampleWizard();
        if(wizard.ShowDialog()== DialogResult.OK) //Set the dialog result to ok in your form, if it would closed corret
        {
         //(theoretical code using arrays created by the wizard)
        }
    }