如何阻止代码直到事件处理程序C#

时间:2018-05-17 12:45:52

标签: c# winforms events delegates async-await

我正在寻找一种方法来阻止我的代码,直到运行事件处理程序。

我的代码如下:

private void extendBt_Click(object sender, EventArgs e)
{
    DisplayPrompt("Select a Construction line (L) or Two point (P) to extend");

    // I want this code is blocked here, then user must press on P or L to continue

    this.KeyPress += new KeyPressEventHandler(keypressed); 

    if (key == "p")
    {
        // Method "P";
    }
    if (key == "l")
    {
        // Method "L";
    }
    else // If L or P aren't pressed => How to return to the select event on keyboard  ?
}

2 个答案:

答案 0 :(得分:0)

这似乎是基于KeyPressEventHandler的基于Windows窗体的应用程序。

从用户界面设计POV,表单应该有RadioButtonCombobox,以便用户可以进行选择。在此之前,请禁用扩展按钮。

如果你想坚持这种方式,你需要创建另一个表单并将选择控件放在那里。在按钮上单击,使用ShowDialog显示CustomForm,并在用户选择的基础上,将DialogResult返回到主窗体。您可以为P / L选择是/否,然后相应处理。

您根本不需要KeyPressEventHandler

答案 1 :(得分:-1)

嗯,如果没有按下,你不需要禁用事件,因为什么都不会发生。

但如果您想要禁用它,请使用以下代码:

    private void extendBt_Click(object sender, EventArgs e)
    {
         DisplayPrompt("Select a Construction line (L) or Two point (P) to extend");

         // I want this code is blocked here, then user must press on P or L to continue

          this.KeyPress += new KeyPressEventHandler(keypressed); 

         if (key == "p")
         {
             // Method "P";
         }
         if (key == "l")
         {
             // Method "L";
         }
        else 
        {
             this.KeyPress -= new KeyPressEventHandler(keypressed); 
        }    
    }