欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现延时并自动关闭MessageBox的方法

程序员文章站 2024-02-19 13:06:52
我们在c#编程中常见的信息提示框(messagebox)是微软net自带的一个用于弹出警告、错误或者讯息一类的“模式”对话框。此类对话框一旦开启,则后台窗体无法再被激活(除...

我们在c#编程中常见的信息提示框(messagebox)是微软net自带的一个用于弹出警告、错误或者讯息一类的“模式”对话框。此类对话框一旦开启,则后台窗体无法再被激活(除非当前的messagebox被点击或者关闭取消)。那么如何使用程序模拟鼠标点击这个messagebox(关闭这个messagebox)令其延时并自动关闭呢?答案是你在弹出这个messagebox之前先启用一个定时器,定时器内部不断向窗体发送enter按钮用于模拟点击msgbox的内容,同时主程序中弹出模式消息框。

具体实现代码如下(本程序运行测试环境基于vs2012 rc 编写):

我们假设窗体上就只有一个button,点击这个button将弹出5个msgbox,同时每个msgbox将延时2秒后自动关闭。

c#功能代码如下:

public partial class form1 : form
{
private system.windows.forms.timer[] ts = new system.windows.forms.timer[6];


public form1()
{
  initializecomponent();
  
}

void t_tick(object sender, eventargs e)
{
  ((system.windows.forms.timer)sender).enabled = false;
  sendkeys.sendwait("{enter}");
}

private void button1_click(object sender, eventargs e)
{
  action act = new action(() => 
  {
 for (int i = 0; i < 6; i++)
 {
   ts[i] = new system.windows.forms.timer();
   ts[i].tick += t_tick;
   ts[i].interval = 2000;
   ts[i].enabled = true;
   messagebox.show("msgbox" + (i + 1));
   thread.sleep(2000);
 }
  });
  act.begininvoke(null, null);
}

}

public partial class form1
  inherits form
  private ts as system.windows.forms.timer() = new system.windows.forms.timer(5) {}


  public sub new()

    initializecomponent()
  end sub

  private sub t_tick(sender as object, e as eventargs)
    directcast(sender, system.windows.forms.timer).enabled = false
    sendkeys.sendwait("{enter}")
  end sub

  private sub button1_click(sender as object, e as eventargs)
    dim act as new action(sub() 
    for i as integer = 0 to 5
      ts(i) = new system.windows.forms.timer()
      addhandler ts(i).tick, addressof t_tick
      ts(i).interval = 2000
      ts(i).enabled = true
      messagebox.show("msgbox" & (i + 1))
      thread.sleep(2000)
    next
end sub)
    act.begininvoke(nothing, nothing)
  end sub

end class

此外需要注意:

1.这里使用了“委托异步”是为了防止主线程被thread延时导致假死的情况发生。

2.sendkeys这里必须使用sendwait,否则会抛出异常。