停止执行直到给出响应

Posted

技术标签:

【中文标题】停止执行直到给出响应【英文标题】: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 返回一个我在需要时设置的布尔值。只有当它被设置时,它才会返回它。 【参考方案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 语句。

以上是关于停止执行直到给出响应的主要内容,如果未能解决你的问题,请参考以下文章

Agora 云录制停止 api 总是给出 404 响应

IntentService 中的数据库操作导致应用程序停止,变得无响应并给出 ANR

停止代码执行,直到 XMLHttpRequest 循环完成

恢复片段后android地图停止响应

上传数据后停止计算,直到再次点击运行

JObject 解析器停止执行而不给出任何输出或错误