通过程序来自动关闭这个消息对话框而不是由用户点击确认按钮来关闭。然而.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. T1080 线段树练习 codevs

    http://codevs.cn/problem/1080/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 一行N个方 ...

  2. ISATAP隧道方式接入IPv6和RRAS(Windows路由与远程访问)似乎是冲突的

    在启用了RRAS的NAT服务器上设置ISATAP隧道,虽然能正常获取IPv6地址,但是IPv6网络实际是不通的...

  3. 源码分析-react1-根节点渲染

  4. python 元组不变 列表可变

    python 元组不变 列表可变 1,   --元组,注意要有逗号: [1] --列表 竟然才开始写python blog:

  5. windows下检測文件改变

    这个主要是应用在我前一篇博客里提到的脚本热载入功能. 主要实现的功能检測目录内文件的变化(改变.新增.删除.重命名),当发现改变的时候通知lua又一次载入脚本.基本上就是一个windows api的使 ...

  6. LeetCode 242. Valid Anagram (验证变位词)

    Given two strings s and t, write a function to determine if t is an anagram of s. For example,s = &q ...

  7. elasticsearch 布尔过滤器 游标查询 Scroll

    组合过滤器 | Elasticsearch: 权威指南 | Elastic https://www.elastic.co/guide/cn/elasticsearch/guide/current/co ...

  8. Delphi中ARC内存管理的方向

    随着即将发布的10.3版本,RAD Studio R&D和PM团队正在制作Delphi在内存管理方面的新方向. 几年前,当Embarcadero开始为Windows以外的平台构建新的Delph ...

  9. sqlserver 触发器实例代码

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update ...

  10. ubuntu系统快捷键设置

    1.打开'系统设置' 2.点击键盘 3.选择快捷键,查看和修改对应的快捷键.