• Application.idle方法


    Application.Idle()方法表示:当应用程序处于空闲状态时执行相应代码。

    示例程序

    1、界面设计:一个简单的Lable控件

    2、代码

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    
    namespace ApplicationIdleDemo
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            public System.Timers.Timer timer;
            private void Form1_Load(object sender, EventArgs e)
            {
                InitTimer();
                InitRefresh();
                Refresh();
            }
    
            /// <summary>
            /// 初始化Timer控件
            /// </summary>
            private void InitTimer()
            {
                timer = new System.Timers.Timer(120000);
                //到达定时时间的时候执行的事件
                timer.Elapsed += new System.Timers.ElapsedEventHandler(TimeUp);
                //设置是执行一次(false) 还是一直执行(true)
                timer.AutoReset = true;
                //是否执行System.Timers.Timer.Elapsed事件
                timer.Enabled = true;
                //启动
                timer.Start();
    
            }
    
            /// <summary>
            /// 定时到点执行的事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            public void TimeUp(object sender, System.Timers.ElapsedEventArgs e)
            {
                Refresh();
            }
    
            private void Refresh()
            {
                this.lbl_idle.Text = "进入空闲期";
                string strPath = Application.StartupPath + @"test.txt";
                using (StreamWriter sw = new StreamWriter(strPath, true))
                {
                    sw.WriteLine("开始进入空闲期,当前时间:" + DateTime.Now);
                    sw.Close();
                }
            }
    
            private void InitRefresh()
            {
                //设定IDLE自动结束
                Application.Idle += new EventHandler(OnApplicationIdle);
                //设定消息过滤
                FormMessageFilter MessageFilter = new FormMessageFilter();
                MessageFilter.ApplicationActive += new EventHandler(OnApplicationActive);
                Application.AddMessageFilter(MessageFilter);
    
            }
    
            /// <summary>
            /// 程序进入空闲时期时会一直执行此事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void OnApplicationIdle(object sender, EventArgs e)
            {
                if (timer != null)
                    timer.Start();
            }
    
            /// <summary>
            /// 当键盘及鼠标事件,关闭timer
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void OnApplicationActive(object sender, EventArgs e)
            {
                if (timer != null)
                {
                    timer.Stop();
                    EndIdle();
                }
                    
            }
    
            private void EndIdle()
            {
                this.lbl_idle.Text = "结束空闲期,进入活动期";
                string strPath = Application.StartupPath + @"test.txt";
                using (StreamWriter sw = new StreamWriter(strPath,true))
                {
                    sw.WriteLine("开始进入活动期,当前时间:" + DateTime.Now);
                    sw.Close();
                }
    
            }
    
            
        }
    
        public class FormMessageFilter : IMessageFilter
        {
            public event EventHandler ApplicationActive;
    
            /// <summary>
            /// 只要是按键盘及鼠标便会引发事件
            /// 因为是为了监视键盘及鼠标,所以均return false;
            /// return ture:会把输入的值清除
            /// 0x100 /* WM_KEYDOWN 
            /// 0x101 /* WM_KEYUP 
            /// 0x200 /* WM_MOUSEMOVE 
            /// 0x201 /* WM_LBUTTONDOWN 
            /// 0x202 /* WM_LBUTTONUP 
            /// 0x203 /* WM_LBUTTONDBLCLK 
            /// 0x204 /* WM_RBUTTONDOWN
            /// 0x205 /* WM_RBUTTONUP
            /// 0x206 /* WM_RBUTTONDBLCLK
            /// 0x20a /* WM_MOUSEWHEEL
            /// </summary>
            public bool PreFilterMessage(ref Message m)
            {
                if (m.Msg == 0x100 || m.Msg == 0x101 || (m.Msg > 0x199 && m.Msg < 0x207) || m.Msg == 0x20a)
                {
                    if (ApplicationActive != null)
                    {
                        ApplicationActive(this, new EventArgs());
                    }
                }
                return false;
            }
        }
    }
  • 相关阅读:
    结构体位域与规范定义顺序的问题
    visual studio 2015使用MFC的console调试打印
    MFC笔记
    MFC中解决文本保存到文件时乱码问题
    C/C++关于文件的读写操作以及文件的打开和保存
    MFC使用自定义消息
    MFC输入框CEdit控件十六进制转换
    Visual studio C++ MFC应用程序自动探测串口号
    visual C++ MFC串口编程overlapped结构汇总
    模块及模块间的接口方式
  • 原文地址:https://www.cnblogs.com/dotnet261010/p/6837870.html
Copyright © 2020-2023  润新知