C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > Application.idle方法

WinForm中Application.Idle方法详解

作者:.NET开发菜鸟

本文详细讲解了WinForm中的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;
        }
    }
}

到此这篇关于WinForm中Application.Idle方法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文