实现一个解压缩程序,可以吧zip文件解压缩到指定目录。
相关技术:
① ZIP解压缩的API;
② 工作进程;
③ 进度条控件的使用;
拷贝粘贴,是软件工程师的日常操作。
API太多,是不能全记住的,只需要记住位置。用到的时候拷贝粘贴过来,再稍微修改即可。
定时任务:定时的,周期性执行的任务。
例如:每3秒刷新一次显示,每5秒自动保存数据。
定时任务的实现方式:
① 创建工作线程,sleep控制时间间隔;
② 创建定时器:
System.Timers.Timer(基于线程池);
System.Threading.Timer(基于线程池);
System.Windows.Forms.Timer(基于消息循环);
System.Threading.Timer 一个基于线程池的定时器。
① 创建定时器;
② 启动定时器/停止定时器;
③ 在定时器回调中,执行定时任务;
(回调在工作线程中执行的)
④ 窗口关闭时,销毁定时器;
以下实例:button控件、textbox控件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 定时任务
{public partial class Form1 : Form{System.Threading.Timer timer;int count = 5;public Form1(){InitializeComponent();//创建定时器//dueTime为-1,表示禁用timer = new System.Threading.Timer(new TimerCallback(this.OnTimer), null, -1, -1);}//点击开始是,启动定时器private void startBtn_Click(object sender, EventArgs e){count = 5;ShowCount();timer.Change(1000, 1000);}//点击停止时,停止定时器private void stopBtn_Click(object sender, EventArgs e){timer.Change(-1, -1);}//窗口关闭时,销毁定时器private void Form1_FormClosing(object sender, FormClosingEventArgs e){timer.Dispose();}//此定时器回调在工作线程(线程池)中调用private void OnTimer(object state){count--;ShowCount();//在工作线程中不能直接操纵UI控件if(count<=0){timer.Change(-1, -1);//停止定时器return;}}private void ShowCount(){if(this.InvokeRequired){this.Invoke(new Action(this.ShowCount));return;}this.countLabel.Text = count + "";}}
}
注意:此定时器是基于线程池,回调在工作线程中执行不能直接更新UI;
System.Windows.Forms.Timer一个基于消息的定时器:
① 创建定时器;
② 启动定时器/停止定时器;
③ 定时器的回调,在消息循环中执行(可以直接更新UI控件/必须尽快返回);
④ 销毁定时器;
① 界面定时器的好处:可以直接更新UI控件;
② 界面定时器的局限:只适合执行轻量级任务,必须尽快完成,不然界面会卡顿;
对于重量级的定时任务,须使用线程定时器;
① 绘制:表盘;
② 绘制:时针、分针、秒值;
③ 定时器:每秒钟重绘制一次;
① 控件的销毁
Control 对象会随着父窗口的销毁二销毁,可以在控件销毁时,一并销毁Timer对象;
模拟时钟.rar: https://url09.ctfile.com/f/22158009-739234274-34012d?p=5939 (访问密码: 5939)