1. 直接用winform 的 timers

拖控件进去
代码
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int sum = 0;
        int qian;
        int bai;
        int shi;
        int ge;
 
private void Form1_Load(object sender, EventArgs e)//初始化
        {
            textBox1.Text = "00.00";
            timer1.Interval = 1000;
            timer1.Stop();
        }
 
private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Owner = this;
            this.Hide();
            f2.Show(); //窗体2返回在窗体2写代码 this.Hide();  this.Owner.Show();
        }
 
 private void button2_Click(object sender, EventArgs e)
        {
 
            timer1.Start();
        }
 private void timer1_Tick(object sender, EventArgs e)//winform的timer,不精确
        {
            sum++;
            qian = sum / 1000;
            bai = sum % 1000 / 100;
            shi = sum % 100 / 10;
            ge = sum % 10;
            textBox1.Text = qian.ToString() + bai.ToString() + "." + shi.ToString() + ge.ToString();
            
        }
 
 
2.使用System.Timers.Timer
先定义System.Timers.Timer t;
 
 private void Form1_Load(object sender, EventArgs e)//初始化
        {
            textBox1.Text = "00.00";
            t = new System.Timers.Timer(1000);
            t.Elapsed += new System.Timers.ElapsedEventHandler(theout);//到达时间的时候执行事件;
            t.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
       
        }
 private void button2_Click(object sender, EventArgs e)
        {
            t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
            //如果不写下面这句会有一个异常。
            //异常:线程间操作无效: 从不是创建控件"richtextbox"的线程访问它
            //但这不是最好的方法。如果只有一个进程调用richtextbox而已。就可以用下面这句
            //如果有多个线程调用richtextbox等控件。就要用委托。见thread第二种方法
 
            Control.CheckForIllegalCrossThreadCalls = false;
            
        }
private void theout(object sender, EventArgs e)
        {
            sum++;
            qian = sum / 1000;
            bai = sum % 1000 / 100;
            shi = sum % 100 / 10;
            ge = sum % 10;
            textBox1.Text = qian.ToString() + bai.ToString() + "." + shi.ToString() + ge.ToString();
        }
 
3.thread
       Thread th;//定义线程
 
private void Form1_Load(object sender, EventArgs e)//初始化
        {
            textBox1.Text = "00.00";
 
            th=new Thread(calculate);
            th.IsBackground = true;
           
         
        }
 
private void button2_Click(object sender, EventArgs e)
        {
 
            th.Start();
            //Control.CheckForIllegalCrossThreadCalls = false;  同2,不写会报错
            
        }
  private void calculate()//线程的第一种方法
        {
            while(true)
            {
                sum++;
                qian = sum / 1000;
                bai = sum % 1000 / 100;
                shi = sum % 100 / 10;
                ge = sum % 10;
                textBox1.Text = qian.ToString() + bai.ToString() + "." + shi.ToString() + ge.ToString();
                Thread.Sleep(1000);
            }
        }
 
 
下面第二种方法:
         private delegate void FlushClient();//定义委托
 
private void Form1_Load(object sender, EventArgs e)//初始化
        {
            textBox1.Text = "00.00";
 
            th = new Thread(CrossThreadFlush);//线程第二种方法
            th.IsBackground = true;
                 
        }
 private void CrossThreadFlush()//第二种方法
        {
            while (true)
            {
                Thread.Sleep(1000);
                ThreadFunction(); 
            }
        }
 
        private void ThreadFunction()//第二种方法
        {
            if (this.textBox1.InvokeRequired)//等待异步             
            {                 
                FlushClient fc = new FlushClient(ThreadFunction); 
                this.Invoke(fc);//通过代理调用刷新方法            
            }             
            else           
            {
                sum++;
                qian = sum / 1000;
                bai = sum % 1000 / 100;
                shi = sum % 100 / 10;
                ge = sum % 10;
                textBox1.Text = qian.ToString() + bai.ToString() + "." + shi.ToString() + ge.ToString();           
            } 
          }

C# winform三种定时方法的更多相关文章

  1. javase-常用三种遍历方法

    javase-常用三种遍历方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; public ...

  2. JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  3. Java中Map的三种遍历方法

    Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历.   告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...

  4. Jquery中each的三种遍历方法

    Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...

  5. spring与mybatis三种整合方法

    spring与mybatis三种整合方法 本文主要介绍Spring与Mybatis三种常用整合方法,需要的整合架包是mybatis-spring.jar,可通过链接 http://code.googl ...

  6. C#使用DataSet Datatable更新数据库的三种实现方法

    本文以实例形式讲述了使用DataSet Datatable更新数据库的三种实现方法,包括CommandBuilder 方法.DataAdapter 更新数据源以及使用sql语句更新.分享给大家供大家参 ...

  7. struts2拦截器interceptor的三种配置方法

    1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...

  8. selenium webdriver三种等待方法

    webdriver三种等待方法 1.使用WebDriverWait from selenium import webdriverfrom selenium.webdriver.common.by im ...

  9. ASP.NET文件上传的三种基本方法

    ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. <form i ...

随机推荐

  1. 简介 - RESTful

    RESTful REST(Representational State Transfer,表现层状态转化),可以简单理解为"资源在网络中以某种表现形式进行状态转移" Resourc ...

  2. HoloLens开发手记 - 使用Visual Studio Using Visual Studio

    不论你是否使用DirectX或Unity来开发全息应用,你都会使用Visual Studio 2015来进行调试和部署应用.在本部分,你将会学习以下内容: 如何通过Visual Studio将你的应用 ...

  3. 2-4 完整Todolist案例

    在2-3 的基础上继续,综合前面的Todolist编写一个完整的案例,实现基本的输入内容,添加内容,点击删除内容 稍微讲解54行代码 splice()的用法

  4. [POC]SuiteCRM 7.10.7 - 'record' SQL Injection

    #################################################################### # Exploit Title: SuiteCRM - 're ...

  5. [,,].length等于几

    分别测试了谷歌.欧朋,火狐,QQ.搜狗,Edge,ie5.7.8.9.10.11 其中ie5,ie7,ie8得到的结果为3 其他均为2:如果最后一个逗号后面为空,则不识别最后一位

  6. 05-TypeScript中的方法新功能(下)

    再TypeScript中,方法还有一些新功能能够让我们更好的控制方法执行. 1.Generator方法: yield关键字用于控制方法在执行的时候暂停住,后续方法调用方又可以从暂停的地方继续执行,这种 ...

  7. php 对中文字符串的处理- 随机取出指定个数的汉字

    mb_internal_encoding("UTF-8"); $str="们以我到他会作时要动国产的一是工就年阶义发成部民可出能方进在岭骗休借了不和有大这主中人上为来分生 ...

  8. 这是一位拿到BAT大厂offer应届生的年终总结,那么你的呢?

    壹 关于求职 2018年初,我还在北京后厂村的马路上被风吹得瑟瑟发抖. 那时我刚刚结束了半年的实习时光,开始考虑年后是否要继续实习.一开始我也在纠结实习转正和秋招之间如何权衡,但是在经历了春招以后,我 ...

  9. CentOS7用阿里云Docker Yum源在线安装Docker

    一.参考文档 官方Docker安装文档:https://docs.docker.com/install/linux/docker-ce/centos 阿里云Docker安装文档:https://yq. ...

  10. leetcode — integer-to-roman

    /** * Source : https://oj.leetcode.com/problems/integer-to-roman/ * * Created by lverpeng on 2017/7/ ...