完整的"登录/主窗体/用户操作激活监听/自动注销"模型

完整的"登录/主窗体/用户操作激活监听/自动注销"模型,能够实现在制定时间内用户无操作时自动注销系统,和一致的事件注册框架,可在其上进行扩展应用.

//登录窗体
public partial class Login : Form
{
        //单件模式
        protected static Login instance;
        public static Login Create()
        {
            if (instance == null)
                instance = new Login();
            return instance;
        }
        private Login()
        {
            InitializeComponent();           
        }
         private void Login_Load(object sender, EventArgs e)
        {
            //注册事件处理
            CommandHelper.RegisteClickEvent(this.btnLogin,delegate(object o, EventArgs p)
            {

                        //登录按键事件处理
                        //用户验证                        
                        ...
                        //呈现主窗体
                        MainForm.Create().Show();
                        //启用操作激活监听
                        CommandHelper.PerformActiveEvent = true; 
                        //重置计数器逻辑
                        CommandHelper.ResetTimeOut();  
                        //隐藏登录窗体
                        this.Hide();

            }
            );

        }

}
//主窗体
public partial class MainForm : Form
{
         //单件模式
         protected static MainForm instance;        
         public static MainForm Create()
         {
                     if (instance == null)
                          instance = new MainForm();
                     return instance;
         }
         private MainForm()
         {
                     InitializeComponent();            
         }
         /// <summary>
        /// 跨线程安全访问模型代码
        /// </summary>
        private delegate void OnNoActionTimeOutHandler();
        /// <summary>
        /// 跨线程安全访问模型代码
        /// </summary>
        private OnNoActionTimeOutHandler onNoActionTimeOutHandler = new OnNoActionTimeOutHandler(PerformNoActionTimeOut);
        /// <summary>
        /// 跨线程安全访问模型代码
        /// </summary>
        private static void PerformNoActionTimeOut()
        {
                //禁用操作激活监听
                CommandHelper.PerformActiveEvent = false;
                //显示登录窗体
                Login.Create().Show();
                //隐藏主窗体
                MainForm.Create().Hide();
        }
         private void MainForm_Load(object sender, EventArgs e)
        {
                //当用户关闭主窗体的时候退出应用程序
                CommandHelper.RegisteFormColsingEvent(this, delegate(object o, FormClosingEventArgs args) 
                { 
                                Environment.Exit(0);
                });
                //注册操作激活监听事件:如果用户不进行任何操作60秒后自动注销
            CommandHelper.RegistHandleWhenNoActionTimeOut(60, delegate(object o, System.Timers.ElapsedEventArgs p)
            {
                                //异步封送模型
                                BeginInvoke(onNoActionTimeOutHandler);       
            }
            );
        }
}
//命令帮助类
public class CommandHelper
{
         /// <summary>
         /// 是否启用操作激活监听
         /// </summary>
         protected static bool performActiveEvent = false;
         /// <summary>
         /// 是否启用操作激活监听
         /// </summary>
         public static bool PerformActiveEvent{get{return performActiveEvent;}set{performActiveEvent = value;}}
         /// <summary>
         /// 时钟对象
         /// </summary>
         protected static System.Timers.Timer taskInvoker = new System.Timers.Timer();
         protected static double interval = 60000d;
         /// <summary>
         /// 用户没有执行任何操作到达指定的时间间隔(s)后将调用的操作
         /// </summary>
         /// <param name="second">指定的时间间隔(s)</param>
         /// <param name="handler">调用的操作</param>
         public static void RegistHandleWhenNoActionTimeOut(int second, System.Timers.ElapsedEventHandler handler)
         {
                System.Reflection.EventInfo eventInfo = taskInvoker.GetType().GetEvent("Elapsed", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
                eventInfo.AddEventHandler(taskInvoker, handler);
                interval = second * 1000;
                taskInvoker.Interval = interval;
                if (performActiveEvent)
                        taskInvoker.Start();
          }

          /// <summary>
          /// 命令事件触发的计数器清零
          /// </summary>
          /// <param name="sender"></param>
          /// <param name="e"></param>
          public static void PerformEventHandler(object sender, EventArgs e)
          {
                  //在此方法中实现对于用户是否操作的状态捕捉;
                  if (performActiveEvent)
                  {
                           ResetTimeOut();
                  }
          }
          /// <summary>
          /// 重置计数逻辑
          /// </summary>
          public static void ResetTimeOut()
          {
                    taskInvoker.Stop();
                    taskInvoker.Interval = interval;
                    taskInvoker.Start();
          }

          /// <summary>
          /// 注册点击事件
          /// </summary>
          /// <param name="command">命令对象</param>
          /// <param name="handler">响应委托</param>
          public static void RegisteClickEvent(object commander, System.EventHandler handler)
          {
                  System.Reflection.EventInfo eventInfo = commander.GetType().GetEvent("Click", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
                  if (eventInfo != null)
                  {
                           eventInfo.AddEventHandler(commander, handler);
                           eventInfo.AddEventHandler(commander, new System.EventHandler(PerformEventHandler));
                  }
          }
          /// <summary>
          /// 注册事件
          /// </summary>
          /// <param name="commander"></param>
          /// <param name="handler"></param>
          /// <param name="eventName"></param>
          public static void RegisteEvent(object commander, System.EventHandler handler,string eventName)
          {
                  System.Reflection.EventInfo eventInfo = commander.GetType().GetEvent(eventName, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
          if (eventInfo != null)
         {
                  eventInfo.AddEventHandler(commander, handler);
                  eventInfo.AddEventHandler(commander, new System.EventHandler(PerformEventHandler));
         }
 }
          /// <summary>
          /// 注册关闭事件
          /// </summary>
          /// <param name="commander"></param>
          /// <param name="handler"></param>
          public static void RegisteFormColsingEvent(object commander, FormClosingEventHandler handler)
         {
                  System.Reflection.EventInfo eventInfo = commander.GetType().GetEvent("FormClosing", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
                  if (eventInfo != null)
                  {
                             eventInfo.AddEventHandler(commander, handler);
                             eventInfo.AddEventHandler(commander, new FormClosingEventHandler(PerformEventHandler));
                       }
          }
          //其他事件
          ....
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当使用窗体(Windows Form)开发C# TCP/IP客户端时,可以借助于`TcpClient`和`NetworkStream`类来进行网络通信。以下是一个简单的C# TCP/IP窗体客户端的示例代码: ```csharp using System; using System.Net.Sockets; using System.Text; using System.Windows.Forms; namespace TcpClientExample { public partial class MainForm : Form { private TcpClient client; private NetworkStream stream; public MainForm() { InitializeComponent(); } private void connectButton_Click(object sender, EventArgs e) { try { // 连接到服务器 client = new TcpClient("127.0.0.1", 8888); stream = client.GetStream(); // 启动接收消息的线程 var receiveThread = new System.Threading.Thread(ReceiveMessages); receiveThread.Start(); // 更新UI状态 connectButton.Enabled = false; sendButton.Enabled = true; } catch (Exception ex) { MessageBox.Show("连接到服务器失败:" + ex.Message); } } private void sendButton_Click(object sender, EventArgs e) { try { // 发送消息给服务器 string message = messageTextBox.Text; byte[] data = Encoding.ASCII.GetBytes(message); stream.Write(data, 0, data.Length); // 清空文本框 messageTextBox.Clear(); } catch (Exception ex) { MessageBox.Show("发送消息失败:" + ex.Message); } } private void ReceiveMessages() { try { while (true) { // 接收服务器的费者享受到无忧的使用体验。 此外,泰格豪雅还为消费者提供一系列的保养建议和使用指南,帮助消费者正确使用和保养手表,延长手表的使用寿命。他们提供了官方网站、手机应用程序和社交媒体平台等多种途径,让消费者随时获取到有关手表保养和使用的信息。 总结起来,泰格豪雅手表维修售后服务以其专业性、高效性和贴心性而闻名。无论是维修手表还是提供额外的服务项目,泰格豪雅都以卓越的品质和出色的服务为消费者提供最佳的体验。无论您在世界的哪个角落,都能够方便地享受到泰格豪雅手表维修售后服务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值