通过程序来自动关闭这个消息对话框而不是由用户点击确认按钮来关闭。然而.Net framework 没有为我们提供自动关闭MessageBox 的方法,要实现这个功能,我们需要使用Window API 来完成。

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Threading; namespace LockScreenMsg
{
public class ShowMsg
{
//使用FindWindow API 来查找对应的窗体句柄
/// <summary>
/// 通过窗口的类名或者窗口标题的名字来查找窗口句柄。
/// </summary>
/// <param name="lpClassName">窗口类名</param>
/// <param name="lpWindowName">窗口标题名</param>
/// <returns></returns>
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName); //使用 EndDialog来关闭对话框
[DllImport("user32.dll")]
static extern bool EndDialog(IntPtr hDlg, out IntPtr nResult);
/*思路是在调用MessageBox.Show 前启动一个后台工作线程,这个工作线程等待一定时间后开始查找消息对话框的窗口句柄,
* 找到后调用EndDialog API 函数关闭这个消息对话框。不过这个方法有个问题,
* 就是如果同时又多个同名的消息对话框(可能不一定是这个应用的),
* 这样做可能会关错窗口,如何解决这个问题,我还没有想出比较好的方法,
* */ /// <summary>
/// 提示框,在设定的时间内自动关闭
/// </summary>
/// <param name="text">文本提示</param>
/// <param name="caption">提示框标题</param>
/// <param name="buttons">按钮类型</param>
/// <param name="timeout">自动消失时间设置(单位毫秒)</param>
/// <returns>返回MessageBox的DialogResult</returns>
public static DialogResult ShowMessageBoxTimeout(string text, string caption,
MessageBoxButtons buttons, int timeout)
{
DialogResult dr;
ThreadPool.QueueUserWorkItem(new WaitCallback(CloseMessageBox),new CloseState(caption, timeout));
return dr=MessageBox.Show(text, caption, buttons);
}
//这个函数中首先利用线程池调用一个工作线程 CloseMessageBox ,并将对话框的标题和延时时间通过CloseState这个类传递给CloseMessageBox函数。 private static void CloseMessageBox(object state)
{
CloseState closeState = state as CloseState; Thread.Sleep(closeState.Timeout);
IntPtr dlg = FindWindow(null, closeState.Caption);//查找 if (dlg != IntPtr.Zero)//如果查找到的结果不等于0
{
IntPtr result;
EndDialog(dlg, out result);//关闭窗口
}
}
}
}

CloseState类如下:

using System;
using System.Collections.Generic;
using System.Text; namespace LockScreenMsg
{
class CloseState
{
private int _Timeout; /// <summary>
/// In millisecond
/// </summary>
public int Timeout
{
get
{
return _Timeout;
}
} private string _Caption; /// <summary>
/// Caption of dialog
/// </summary>
public string Caption
{
get
{
return _Caption;
}
} public CloseState(string caption, int timeout)
{
_Timeout = timeout;
_Caption = caption;
}
}
}

使用:

DialogResult dr= ShowMsg.ShowMessageBoxTimeout("在5s内若无任何动作程序将自动退出", "提示!", MessageBoxButtons.OK, 1000 * 5);

C# 设定时间内自动关闭提示框的更多相关文章

  1. C#自动关闭弹出提示框

    自动关闭弹出提示框(用一个小窗体显示提示信息):例如在一个form窗体中弹出自动关闭的提示框1.首先创建一个弹出提示信息的窗体 AutoCloseMassageBox,在里面拖一个lable控件,去掉 ...

  2. 提示框alertmsg

    初始化: 1.Data属性:DOM添加属性data-toggle="alertmsg",并定义type及msg参数 示例代码: <button type="butt ...

  3. 提示框插件SweetAlert

    SweetAlert可以替代Javascript原生的alert和confirm等函数呈现的弹出提示框, 它将提示框进行了美化,并且允许自定义, 支持设置提示框标题.提示类型.内容展示图片.确认取消按 ...

  4. sweetalert提示框

    文档 sweetalert Api:http://t4t5.github.io/sweetalert/ 开源项目源码:https://github.com/t4t5/sweetalert 在文件中首先 ...

  5. C# WinForm 提示框延迟自动关闭

    有时候我们需要弹出个提示框然后让它自己关闭,然而实际使用中的弹出框确实阻塞进程,网上貌似有一种另类的解决方式,大致思路是把弹出框放到另外的一个窗体上,直接贴代码 主窗体 using System; u ...

  6. js弹出框、对话框、提示框、弹窗总结

    一.JS的三种最常见的对话框 //====================== JS最常用三种弹出对话框 ======================== //弹出对话框并输出一段提示信息 funct ...

  7. 基于Metronic的Bootstrap开发框架经验总结(6)--对话框及提示框的处理和优化

    在各种Web开发过程中,对话框和提示框的处理是很常见的一种界面处理技术,用得好,可以给用户很好的页面体验,Bootstrap开发也一样,我们往往在页面新增.编辑.查看详细等界面使用弹出对话框层的方式进 ...

  8. [原]发布一个jQuery提示框插件,Github开源附主站,jquery.tooltips.js

    一个简单精致的jQuery带箭头提示框插件 插件写好快一年了,和一个 弹出框插件(点击查看) 一起写的,一直没有整理出来,昨天得功夫整理并放到了github上,源码和网站均可在线看或下载. CSS中的 ...

  9. 纯CSS实现tooltip提示框,CSS箭头及形状之续篇--给整个tooltip提示框加个边框

    在前面一篇中我们介绍了纯CSS实现tooltip提示框,通俗的讲也就是CSS箭头及形状 不过注意一点是,他始终是一个元素,只是通过CSS实现的,今天我们要说的是给这个“tooltip提示框”整体加一个 ...

随机推荐

  1. 洛谷—— P2658 汽车拉力比赛

    https://www.luogu.org/problem/show?pid=2658 题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ M,N ...

  2. Spring MVC 4实现RESTFul WebServices的CRUD实例和使用RestTemplate进行请求(全注解形式配置Web和Filter)

    在这篇文章中,我们将使用Spring4 MVC编写一个CRUD RESTful Web服务,写一个REST客户端RestTemplate来使用这些服务.我们也将利用外部客户端测试的服务. 下面将展示核 ...

  3. Maticsoft Code Generator

    源码:https://github.com/easonjim/MaticsoftCodeGenerator bug提交:https://github.com/easonjim/MaticsoftCod ...

  4. qt自己定义搜索框(超简单,带效果图)

    1. 什么也不要说.先上效果图: 2. 代码 头文件: #ifndef APPSEARCHLINE_H #define APPSEARCHLINE_H #include <QLineEdit&g ...

  5. 例说linux内核与应用数据通信系列

    [版权声明:尊重原创.转载请保留出处:blog.csdn.net/shallnet.文章仅供学习交流,请勿用于商业用途] 本系列通过源代码演示样例解说linux内核态与用户态数据通信的各种方式: 例说 ...

  6. vijos- P1383盗窃-黑珍珠 (python + 代码优化)

    P1383盗窃-黑珍珠 Accepted 标签:怪盗基德 VS OIBH[显示标签] 背景 怪盗基德 VS OIBH 第二话 描写叙述 今次怪盗基德再次对阵OIBH,目标是Black Star!基德已 ...

  7. group & user

    例子 groupadd  test   创建test用户组 useradd  user1   创建user1用户 passwd   user1   设置user1的密码 useradd  user2  ...

  8. spring装配集合

    前面我们已经了解了怎样使用spring装备简单的属性(使用value属性)和引用其它bean的属性(使用ref属性).可是value和ref仅在Bean的属性值是单个值的情况下才实用.当bean的属性 ...

  9. 【Bzoj2456】mode

    Position: http://www.lydsy.com/JudgeOnline/problem.php?id=2456 List Bzoj2456 mode List Description S ...

  10. 【线程安全】—— 单例类双重检查加锁(double-checked locking)

    1. 三个版本单例类的实现 版本1:经典版 public class Singleton { public static Singleton getInstance() { if (instance ...