当前位置: 移动技术网 > IT编程>开发语言>c# > C#实现延时并自动关闭MessageBox的方法

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

2019年07月18日  | 移动技术网IT编程  | 我要评论
我们在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,否则会抛出异常。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网