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. MANIFEST.MF文件详解

    1. 依赖包是否在classpath中: 2. 资源文件目录是否在classpath中: 3. 主类是否正确: 具体配置参考 maven-jar-plugin 配置 <plugin> &l ...

  2. java几种垃圾收集方法和垃圾收集器

    标记清除法: 分为两个阶段,标记----清除 标记阶段将所有需要回收的对象做标记,然后在清除阶段将所有的标记对象回收 但是这种回收方法有很大的缺点,那就是这两个过程的的效率并不高,两个过程都是效率很低 ...

  3. [Leetcode]827.使用回溯+标记解决最大人工岛问题

    在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地. 进行填海之后,地图上最大的岛屿面积是多少?(上.下.左.右四个方向相连的 1 可形成岛屿) 示例 1: 输入: ...

  4. 浅析mpvue的事件代理系统

    前言 说来惭愧,用 mpvue 大半年,小程序快一年了,居然还试图用 event.stopPropagation 方法阻止事件冒泡,也是有点蠢.痛定思痛,写篇博文来认真捋一捋小程序的事件系统和 mpv ...

  5. 安装mysql.zip文件教程(包含常见问题修复)

    参考链接: https://jingyan.baidu.com/article/63f236284aca280208ab3dcc.html https://jingyan.baidu.com/arti ...

  6. [HNOI2018] 道路

    Description 给一棵二叉树,每个叶子节点 \(i\) 有三个属性 \(a_i,b_i,c_i\) 每个非叶子节点都能标记向左右儿子中的一条边(记作 \(x\) 边和 \(y\) 边) 设叶子 ...

  7. openssl genrsa

    openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html genrsa用于生成RSA私钥,不会生成公钥,因为公钥提取自私钥,如果需要查 ...

  8. C# 获取用户IP地址(转载)

    [ASP.NET开发]获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己 ...

  9. over()的用法

    开窗函数over的常用方法-- 1.为每条数据显示聚合信息-- 2.为每条数据提供分组的聚合函数结果-- 3.与排名函数一起使用 -- 1 为每条数据显示聚合信息 -- 准备一些数据-- 该查询表只能 ...

  10. WebFrom 【母版页】

    ASP.NET中母版页作用 一是提高代码的复用(把相同的代码抽出来) 二是使整个网站保持一致的风格和样式. 母版页存在就一定要有内容页的存在,否则母版页的存在就没有了意义. .master 一.添加母 ...