如何打开弹出窗口来警告用户并在后台运行?
Posted
技术标签:
【中文标题】如何打开弹出窗口来警告用户并在后台运行?【英文标题】:How can I open a popup window to alarm user and running in background? 【发布时间】:2015-01-14 13:35:43 【问题描述】:我需要在下雨时打开一个弹出窗口来提醒用户,并通过按下按钮向他\她提供反馈,以确保他\她知道天气状态。但我希望我的代码的其他行在后台运行。换句话说,我正在寻找一种在用户按下按钮之前不会导致程序停止的解决方案。我使用 Visual Studio 2013 WinForms。谢谢大家。
【问题讨论】:
WinForms? WPF? ASP.NET? 亲爱的 dymanoid,Visual Studio 2013 WinForms 您可以通过调用YourWindow.Show()
而不是YourWindow.ShowDialog()
来显示您的弹出窗口。这会将您的窗口显示为非模态窗口,并且您的代码将继续执行。
亲爱的 dymanoid,在您的解决方案中,是否可以将按下按钮的结果作为 MessageBox 获得?
我不确定您在问什么,但如果您的意思是是否可以通过单击按钮获得 System.Windows.Forms.DialogResult
值,那么 - 是的。那没问题。但是您必须明确关闭窗口,因为设置 DialogResult
不会这样做,因为您的窗口是非模态的。
【参考方案1】:
不过,我不确定您的具体要求是什么
Messagebox.show
显示一个messagebkx
,它被称为“模态”,这意味着您无法在其他窗口打开时与之交互。要拥有非模式消息框,请尝试创建一个新表单并使用messagebox.show
来显示它。
您必须创建一个表单并使用Show()
来显示。
请注意,使用messagebox.show
,您会在关闭messagebox
后立即获得结果,非模态消息框不会这样做,您需要编写一些代码来处理它,例如事件。
如果不是活动,您可能正在寻找async
await
。
Async
和 await
是两个 C# 关键字,更多信息可以在此处的 Microsoft 文档中找到:http://msdn.microsoft.com/en-us/library/hh191443.aspx
如果您创建一个名为 showDialogAsync()
的 async
方法来等待用户结果,然后在新线程上等待它,您将获得以下结果:
您的程序正常运行
满足条件,需要显示对话框
showDialogAsync
被调用并等待。
Showdialogasync
等待用户输入。
控制权返回给调用showDialogAsync
的方法
当用户点击一个按钮时,调用方法的 await 之后的代码将运行。
此图显示了一些 async
代码中的控制流,可能会有所帮助:
http://i.msdn.microsoft.com/dynimg/IC612215.png
【讨论】:
据我了解,问题是如何显示非模态弹出窗口。这与 async/await 或多线程无关。以上是关于如何打开弹出窗口来警告用户并在后台运行?的主要内容,如果未能解决你的问题,请参考以下文章