问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C#实现倒计时的功能

发布网友 发布时间:2022-05-11 01:05

我来回答

2个回答

热心网友 时间:2022-04-23 09:44

  C#实现倒计时功能,参考代码如下:

int Timecount = 0;//记录倒计时总毫秒数
        int isstop = 0;//标示是否启动/暂停的变量,0表示第一次初始化
        private void button1_Click(object sender, EventArgs e)
        {
            if (this.button1.Text == "开始计时" || this.button1.Text == "继续计时")
            {
                this.button1.Text = "暂停计时";
                //this.timer1.Interval = 1;
                //this.timer1.Start();
                if (isstop == 0)//第一次执行或者倒计时事件设置发生变化,则重新倒计时
                {
                    Timecount = Convert.ToInt32(txtTotalmm.Text) * 60000;//毫秒
                    Thread counter = new Thread(Counter);
                    counter.Start();
                    Control.CheckForIllegalCrossThreadCalls = false;//放弃捕获对错误线程的调用,否则在线程中无法调用控件名  
                    this.txtTotalmm.ReadOnly = true;
                    this.button2.Visible = false;
                    txthour.ForeColor = Color.Black;
                    txtmm.ForeColor = Color.Black;
                    txtss.ForeColor = Color.Black;
                    txtmss.ForeColor = Color.Black;
                }
                isstop = 1;//启动
            }
            else
            {
                this.button1.Text = "继续计时";
                //this.timer1.Stop();
                isstop = 2;//暂停
            }
        }
        public void Counter()
        {
            try
            {
                while (Timecount >= 0)
                {
                    this.txthour.Text = (Timecount / 3600000).ToString();
                    this.txtmm.Text = ((Timecount / 60000) % 60).ToString();
                    this.txtss.Text = ((Timecount / 1000) % 60).ToString();
                    this.txtmss.Text = (Timecount % 1000).ToString();
                    //label1.Text = hour.ToString() + "时 " + minute.ToString() + "分 " + second.ToString() + "秒" + millsecond + "毫秒";
                    if (Timecount == 0)
                    {
                        txthour.ForeColor = Color.Red;
                        txtmm.ForeColor = Color.Red;
                        txtss.ForeColor = Color.Red;
                        txtmss.ForeColor = Color.Red;
                        this.txtTotalmm.ReadOnly = false;
                        this.button2.Visible = true;
                        this.button1.Text = "开始计时";
                        isstop = 0;
                        try
                        {
                            Thread currthread = Thread.CurrentThread;
                            currthread.Abort();// 终止当前进程,会触发ThreadAbortException异常,从而终止进程,所以下面需要捕获该异常才能终止进程
                        }
                        catch (ThreadAbortException) { }                    
                    }
                    if (isstop != 2)
                        Timecount -= 1;
                    Thread.Sleep(1);
                }
            }
            catch { }//处理异常关闭情况下的异常问题
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.txtTotalmm.Text = (Convert.ToInt32(this.txtTotalmm.Text) + 1).ToString();
        }
        //Timer控件的Interval频率值小于17时便会产生误差,所有得到的倒计时秒数比普通的慢很多,当倒计时精确到毫秒时,则不适用用Timer控件。        
        //private void timer1_Tick(object sender, EventArgs e)
        //{
        //    if (Timecount >= 0)
        //    {
        //        this.txthour.Text = (Timecount / 3600000).ToString();
        //        this.txtmm.Text = ((Timecount / 60000) % 60).ToString();
        //        this.txtss.Text = ((Timecount / 1000) % 60).ToString();
        //        this.txtmss.Text = (Timecount % 1000).ToString();
        //        //label1.Text = hour.ToString() + "时 " + minute.ToString() + "分 " + second.ToString() + "秒" + millsecond + "毫秒";
        //        if (Timecount == 0)
        //        {
        //            txthour.ForeColor = Color.Red;
        //            txtmm.ForeColor = Color.Red;
        //            txtss.ForeColor = Color.Red;
        //            txtmss.ForeColor = Color.Red;
        //        }
        //        Timecount -= 10;
        //    }           
        //}

  注意:

  1.倒计时如果是以秒为单位,可以选择Timer和线程来实现,如果以毫秒为单位,建议使用线程来实现。

  2.使用线程时,如果要暂停,需要使用Abort()方法终止线程,该方法是通过触发ThreadAbortException异常来实现对线程的终止的,所以需要捕获该异常,才能终止线程。所以 Abort()引发的该异常时正常的。

热心网友 时间:2022-04-23 11:02

刚好有空 给你写了一个 代码:using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;namespace WinForm_test_01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} int hour = 12;
int minute = 0;
int second = 0;
private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(Func);
thread.Start();
} private void Func()
{
while (hour > 0)
{
this.Invoke((EventHandler)delegate {

if (second < 0)
{
second = 59;
minute--; }
if (minute < 0)
{
minute = 59;
hour--;
}
label1.Text = "剩余时间:" + hour.ToString() + "小时 " + minute.ToString() + "分钟 " + second.ToString() + "秒";
});
Thread.Sleep(1000);
second--;
}
} }

}
有不明白的地方请追问.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
武汉民政职业学院地址在哪里 全国有哪些民政学院 武汉民政学院 北京哪些区较好 北京哪个区环境好 北京海淀区属于什么档次 北京市哪个区最好 北京哪个区房子最好 递延是什么意思通俗 婚后是不是一定要自己买房子才可以结婚呢? 单片机语言中unsigned char Timecount_500ms=0是什么意思 怎样用单片机实现频率的测量 单片机里面的C语言··不懂timecount++是什么意思?timecount--是什么意思? 晚上总是难以入睡,有什么好方法吗? 商业公寓40年以二手房出售,有什么税费,和费用? 公寓交易费用有哪些 入睡太慢。有什么好的办法 50平方公寓,卖33万,过户费多少钱? 公寓的过户费用是几个点? 如何用一台电脑拖3到4个显示器 一个电脑主机最多能安几个显示器 单车液晶显示屏数量 有哪些日漫的音乐,你一听就会热血沸腾的? 有哪些歌曲听了之后让你热血澎湃? 玩游戏选i7 还是i5呢 求推荐几首励志纯音乐,适合做视频背景音乐,一听就能让人热血沸腾的那种。 醉川东是川酒集团的产品吗? 川酒集团酿造的醉川东最大的特点是什么? 去年川酒完成全国近半营收,川酒有哪些特色? 请问06年的海南马自达323的价格(已经开了 8万公里 1.6升 自动挡)? 怎样用单片机外部中断测方波周期 C#计时功能 数码管分时显示的问题 c# 线程什么时候开始计时? 怎么设置线程在我希望的时间点的2秒后开始执行执行5秒后结束? C++win32 将datetime转换成纯秒数 网页一段时间后自动跳转到下一个连接 从嘉善到上海浦东新区有直通车吗 百度本地直通车关键词怎样设置,跟百度推广有冲突怎么办 上海哪里买车险?经验丰富的老车主有绝招 上海一女子持刀伤人致5伤,是什么原因引发的惨案? 上海财经大学mba在东莞是唯一有教学点的高校吗? 上海财经大学研究生~难考吗~ 外地车辆车险在外地买的平安保险,现在车在上海,请问车险在哪买? 世界最出名的四大会计师事务所的名称?分别在哪个国家? 2019年高考成绩是277分2C文科能上什么高校? 有ACCA证书,但不是211,985大学毕业的能去上海有名的外企或四大上班吗 我想请问现在在网上可以查到高考的分数吗? 谁家的预付消费平台上商家比较多? 上海三秋兮餐饮管理有限公司怎么样?