如何打开弹出窗口来警告用户并在后台运行?

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

Asyncawait 是两个 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 或多线程无关。

以上是关于如何打开弹出窗口来警告用户并在后台运行?的主要内容,如果未能解决你的问题,请参考以下文章

BAT批处理文件的msdos窗口如何开机自动后台运行不弹出窗口?

android 怎样启动后台服务

在后台运行时显示弹出窗口的权限

应用程序在后台运行时如何弹出QMessageBox?

如何查看电脑后台正在运行的程序

仅当应用程序打开并运行时,如何在后台运行方法?