Application.Idle()方法表示:当应用程序处于空闲状态时执行相应代码。
示例程序
1、界面设计:一个简单的Lable控件
2、代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
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方法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/dotnet261010/p/6837870.html