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. ubuntu 16.04 搭建git小型服务器

    最近搭建了一个小型git服务器,由于网上资料鱼龙混杂,让我着实踩了不少地雷.做一个记录,以备不时之需. 一 搞清楚你的需求? 假如你要搭建的服务器只供几十个人使用,并且没有专门的网管服务的话,切记,一 ...

  2. Xamarin.Android 本地数据库 SQLiteDatabase 操作

    目的:使用 SQLiteDatabase 创建本地数据库.表,并对数据进行增删改查操作. 引用命名空间: using Android.App; using Android.Widget; using ...

  3. zabbix报错cannot set resource limit: [13] Permission denied解决方法

    zabbix-server启动时出现以下错误: 2912:20180326:050930.023 using configuration file: /etc/zabbix/zabbix_server ...

  4. myslide 插件开发知识点总结和 css3 动画性能问题的研究

    myslide 插件开发知识点总结和 css3 动画性能问题的研究 这篇文章主要是总结最近开发过程中遇到的问题.有几个问题又是不容易发现原因的问题,但是最后的结果又是很简单的. 1.手机端的 slid ...

  5. 使用 Notification API 开启浏览器桌面提醒

    Notifications API 允许网页控制向最终用户显示系统通知 —这些都在顶级浏览上下文视口之外,因此即使用户已经切换标签页或移动到不同的应用程序,也可以显示.该API被设计成与不同平台上的现 ...

  6. js实现深拷贝的一些方法

    在ECMAScript变量中包含两种不同类型的值:基本类型值和引用类型值. 基本类型值:Undefined.Null.Boolean.Number.String 引用类型值:Object.Array. ...

  7. Zuul过滤器

    1.Zuul过滤器生命周期Zuul大部分功能都是通过过滤器来实现的,Zuul定义了4种标准的过滤器类型,这些过滤器类型对应于请求的典型生命周期.a.pre: 这种过滤器在请求被路由之前调用.可利用这种 ...

  8. 华为云数据库中间件DDM性能卓越,遥遥领先于业界

    就说一句话吧,后来者居上,不服不行.

  9. DNS服务器能遭受到的DDNS攻击类型

    每个网站都有可能会遭受到攻击,现在的互联网服务器遭受的最多的是DDOS攻击,本文总结了一些DNS服务器会遇到的DDOS攻击类型,以及相应的预防措施. [1]的作者将DDOS的攻击分为三种类型: 大数据 ...

  10. 【Elasticsearch全文搜索引擎实战】之Head插件实践

    简介 Elasticsearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Ap ...