【问题标题】:Halt execution until a response is given停止执行直到给出响应
【发布时间】:2014-04-18 22:21:06
【问题描述】:

我有一些可根据要求运行并使用 CodeDomProvider 编译的脚本。下面是一个例子:

var yes = SendYesNo();

if (yes)
    // Do something
else
    // Do something else

现在。 SendYesNo 显示一个包含用户输入的框。我想停止该行的脚本,直到设置响应。然后,获取响应并将其应用于变量并继续执行。到目前为止,我使用了 await/async,但我不喜欢这个想法。用别的方法可以吗?

【问题讨论】:

  • 这是 WinForms、WPF、WebBased、控制台应用程序吗?
  • @ErikPhilips WinForms.
  • SendYesNo 做什么?你不能只使用 ShowDialog 吗?
  • 这不起作用?当您调用 SendYesNo() 时,程序无法继续,直到 SendYesNo() 完成...
  • @Brad 那不是我的问题。我想知道如何让 SendYesNo 返回一个布尔值,但只有当我设置该布尔值时。就像,让 SendYesNo 返回一个我在需要时设置的布尔值。只有当它被设置时,它才会返回它。

标签: c#


【解决方案1】:

您可以使用返回参数的模式窗口。如果需要的输入更复杂,您可以使用标准 MessageBox 或自定义表单。

类似:

public class SomeForm : Form
{
    public bool yesNo
    {
        get
        {
            return yesNo;
        }
        set
        {
        //set value according to your logic
        }
    }
}

在你的主表单中这样称呼它:

using (var form = new SomeForm())
{
    if (form.ShowDialog() == DialogResult.OK)
    {
        var yesNo = form.yesNo;
        if (yes)
        // Do something
        else
        // Do something else
    }
}

如果它只是一个是/否消息框,您可以参考: How do I create a message box with "Yes", "No" choices and a DialogResult?

【讨论】:

  • 你误解了我的问题。来自用户的输入甚至不是消息框,输入甚至无关紧要。我只想知道如何停止执行,直到给出响应。是否是 WinForms 并不重要,因为无论如何我不会为此使用 WinForms。
  • 如果输入无关紧要,那为什么还要等待呢?
  • 基本上有两种情况:1)你需要等待输入,你不希望你的计算继续。你的方法是同步的,在它返回之前它不会超过它。 2)您不想等待输入,但您想在获得结果后处理结果。在这种情况下,一旦输入可用,您可能希望使用 Thread 和回调/事件。你的情况是哪一种?
  • "@ErikPhilips WinForms. – user3265040 19 分钟前" "无论如何,我没有为此使用 WinForms。 – user3265040 2 分钟前" 嗯,好的。我放弃。你在问什么???
  • 在这种情况下,由于您的代码是同步的,因此您的代码已经按预期工作。在 SendYesNo() 方法返回之前,您不会到达 IF 语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多