停止执行直到给出响应
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 语句。以上是关于停止执行直到给出响应的主要内容,如果未能解决你的问题,请参考以下文章