zoukankan      html  css  js  c++  java
  • C# winform三种定时方法

    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();           
                } 
              }
  • 相关阅读:
    社交因素是《王者荣耀》成功的最大助推力:3星|《三联生活周刊》2017年33期
    29军割据华北简史:3星|《三联生活周刊》2017年28期
    3星|《哈佛商业评论》201708:IT项目风险之大远超你想象
    3星|《食品信息图》:英国吃货写的食品百科,信息图水平一般
    3星|《哈佛商业评论》2017年第7期
    5星|《上帝的手术刀》:人类编辑自身基因的技术与商业过程。
    5星|《穷查理宝典》:智者语录,当代《论语》
    秒杀于丹、蒋勋、蒙曼,每篇都有10万+的潜质。《六神磊磊读唐诗》,5星。
    UE如何去除重复行,删除重复行
    云端软件平台 自己封装软件 图标不正常怎么办
  • 原文地址:https://www.cnblogs.com/fuqiang88/p/10168717.html
Copyright © 2011-2022 走看看