• c#自动关闭 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 的效果。  

  • 相关阅读:
    HTML5开发在你的游戏应用中加入广告(转)
    AJAX笔试面试题汇总
    jQuery boxy弹出层插件中文演示及讲解(转)
    jquery获取css中的选择器
    post与get在ashx中的取值的区别
    css元素定位和布局
    jquery作用和优势
    css选择器
    css中的框架模型
    javascript中的对Attr(dom中属性)操作
  • 原文地址:https://www.cnblogs.com/feiyuhuo/p/5110330.html
Copyright © 2020-2023  润新知