c#自动关闭 MessageBox 弹出的窗口

摘要:
众所周知,MessageBox的弹出窗口是一个模态窗口,它将自动阻止父线程。因此,如果您有以下代码:MessageBox Show;以下代码将仅在MessageBox窗口关闭后运行。因此,我们可以考虑在MessageBox之前添加一个线程来“杀死”MessageBox窗口。因为我们需要在指定的时间内“杀死”窗口,我们可以直接考虑使用Timer类,然后调用系统API关闭window=IntPtr。零){//如果找到窗口,则关闭PostMessage;}}必要时调用StartKiller方法以自动关闭MessageBox。

我们都知道,MessageBox弹出的窗口是模式窗口,模式窗口会自动阻塞父线程的。所以如果有以下代码:

MessageBox.Show("内容',"标题"); 

则只有关闭了MessageBox的窗口后才会运行下面的代码。而在某些场合下,我们又需要在一定时间内如果在用户还没有关闭窗口时能自动关闭掉窗口而避免程序一直停留不前。这样的话我们怎么做呢?上面也说了,MessageBox弹出的模式窗口会先阻塞掉它的父级线程。所以我们可以考虑在MessageBox前先增加一个用于“杀”掉MessageBox窗口的线程。因为需要在规定时间内“杀”掉窗口,所以我们可以直接考虑使用Timer类,然后调用系统API关闭窗口。

核心代码如下:

[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet=CharSet.Auto)]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName); 

[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

public const int WM_CLOSE = 0x10;

private void StartKiller()
{
    Timer timer = new Timer();
    timer.Interval = 10000;    //10秒启动
    timer.Tick += new EventHandler(Timer_Tick);
    timer.Start();
}

private void Timer_Tick(object sender, EventArgs e)
{
    KillMessageBox();
    //停止计时器
    ((Timer)sender).Stop();
}

private void KillMessageBox()
{
    //查找MessageBox的弹出窗口,注意MessageBox对应的标题
    IntPtr ptr = FindWindow(null,"标题");
    if(ptr != IntPtr.Zero)
    {
        //查找到窗口则关闭
        PostMessage(ptr,WM_CLOSE,IntPtr.Zero,IntPtr.Zero);
    }
}

在需要的地方调用 StartKiller 方法即可达到自动关闭 MessageBox 的效果。  

免责声明:文章转载自《c#自动关闭 MessageBox 弹出的窗口》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PHP7革新与性能优化如何阅读mysql源码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#调用Win32 的API函数User32.dll

转自:http://www.cnblogs.com/gaoweipeng Win32的API函数是微软自己的东西,可以直接在C#中直接调用,在做WinForm时还是很有帮助的。有时候我们之直接调用Win32 的API,可以很高效的实现想要的效果。 代码 using System;using System.Collections.Generic;using...

JS实现纯前端将数据导出Excel两种方式亲测有效

由于项目需要,需要在不调用后台接口的情况下,将json数据导出到excel表格,参考了好多资料以及很多大佬写的博客终于实现,兼容chrome没问题,其他还没有测试过,这边介绍两种实现方式,并附上代码和gif动图,博主不才还望轻喷,代码可直接copy运行 方法一 将table标签,包括tr、td等对json数据进行拼接,将table输出到表格上实现,这种方法...

asp中接收到querystring是utf8编码的处理方式

<% response.charset = "utf-8"response.write URLDecode(request.querystring("msg") +"<BR>") Function URLDecode(sConvert)     Dim aSplit     Dim sOutput     Dim I     If IsN...

kindeditor在线编辑器的使用心得

1、如何声明引用? <!DOCTYPEhtml> <html> <head> <metacharset="utf-8"/> <title>kindeditor在线编辑器的使用心得</title> <!--添加kindeditor的引用--> <scr...

C#直接打印word文档

    using using Microsoft.Office.Interop.Word;    (通过添加引用-com组件,找office的word组件  /// <summary>        /// 打印word        /// </summary>        /// <param name="filepa...

flask第30篇——宏macro和import标签

宏是Jinja2特有的,像Django则没有这个。 先新建一个项目macroDemo: 然后在templates文件夹中新建index.html文件,并在代码中返回渲染后的文件: 然后回到index.html,现在假设我们要写一个登录的表单: 代码: <!DOCTYPE html><html lang="en"><he...