Winform客户端实现超时登录

用途:主要是用来解决当客户端长时间不操作时,再次操作需要重新登录验证的,这里是纯客户端的角度去实现这个功能,可以用于单机软件。

  1. 自定义按钮控件,系统中需要限制操作的地方均需要引用此控件.

    public partial class ButtonEx : Button
  2. 定义一个全局时间变量和超时时间

    public static class GlobalData {     public static DateTime OperationTime=DateTime.Now;     public static int TimeOut = 20; }
  3. 在自定义控件中对MouseDown事件进行注册或者重新MouseDown事件

    public partial class ButtonEx : Button    {        public ButtonEx()        {            InitializeComponent();            MouseDown += ButtonEx_MouseDown;        }
            private void ButtonEx_MouseDown(object sender, MouseEventArgs e)        {            if (GlobalData.OperationTime.AddMinutes(GlobalData.LoginTimer) < DateTime.Now)            {                Enabled = false;                TimerUtils.SetTimeout(1500, () =>                {                    BeginInvoke(new Action(() =>                    {                        Enabled = true;                    }));                });                new FormLogin().ShowDialog();            }            else            {                GlobalData.OperationTime = DateTime.Now;            }        }
        }
  4. 在登录成功后对OperationTime重新赋值当前时间,并关闭登录页面,注意登录页面的按钮不要使用自定义按钮

    if (txt_pwd.Text == "123456")            {                GlobalData.OperationTime = DateTime.Now;                DialogResult = DialogResult.OK;            }            else            {                lb_msg.Text = "密码错误";            }

代码解析:为什么使用MouseDown事件来做?因为MouseDown是可以在Click之前触发的,但是在触发MouseDown事件后,Click事件还是会继续触发的,所以在该事件中需要先将按钮设置为不可用,即Enabled = false,然后在经过短暂的延时后,将按钮重新启用既可防止Click事件的触发;随后就是每次操作都会更新一下操作时间以延迟超时。