C# ZIP解压缩 模拟时钟

一 ZIP接压缩

实现一个解压缩程序,可以吧zip文件解压缩到指定目录。

相关技术:
① ZIP解压缩的API;
② 工作进程;
③ 进度条控件的使用;

二 界面流程

拷贝粘贴,是软件工程师的日常操作。
API太多,是不能全记住的,只需要记住位置。用到的时候拷贝粘贴过来,再稍微修改即可。

三 定时任务

定时任务:定时的,周期性执行的任务。
例如:每3秒刷新一次显示,每5秒自动保存数据。
定时任务的实现方式:
① 创建工作线程,sleep控制时间间隔;
② 创建定时器:

System.Timers.Timer(基于线程池);
System.Threading.Timer(基于线程池);
System.Windows.Forms.Timer(基于消息循环);

1 使用线程定时器

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控件/必须尽快返回);
④ 销毁定时器;

1 要点与细节

① 界面定时器的好处:可以直接更新UI控件;
② 界面定时器的局限:只适合执行轻量级任务,必须尽快完成,不然界面会卡顿;
对于重量级的定时任务,须使用线程定时器;

五 模拟时钟

① 绘制:表盘;
② 绘制:时针、分针、秒值;
③ 定时器:每秒钟重绘制一次;

1 要点与细节

① 控件的销毁
Control 对象会随着父窗口的销毁二销毁,可以在控件销毁时,一并销毁Timer对象;
模拟时钟.rar: https://url09.ctfile.com/f/22158009-739234274-34012d?p=5939 (访问密码: 5939)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值