c# winform 通过线程和委托制作时间控件

来源:互联网 发布:淘宝二手闲置 编辑:程序博客网 时间:2024/05/22 01:43

1)不传递参数

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Threading;namespace Test{    public partial class Form1 : Form    {        private Thread MyThread = null;//定义线程        private delegate void MyDelegate();//定义委托        public Form1()        {            InitializeComponent();        }        private void Form1_Load(object sender, EventArgs e)        {            MyThread = new Thread(MyFun1);            MyThread.Start();        }        private void MyFun1()        {            MyDelegate md = new MyDelegate(MyFun2);            while (true)            {                this.Invoke(md);                Thread.Sleep(1000);            }        }        private void MyFun2()        {            lblTime.Text = DateTime.Now.ToString();        }        private void Form1_FormClosing(object sender, FormClosingEventArgs e)        {            if (MyThread != null)            {                MyThread.Abort();            }        }    }}

2)传递参数

using System;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;namespace DelegateDemo{    public partial class Form1 : Form    {        private Thread myThread = null;//定义线程        private delegate void MyDelegate(object para);//定义委托        public Form1()        {            InitializeComponent();            Label lbl = new Label();            lbl.Text = "mouse enter me!";            lbl.AutoSize = true;            lbl.Location = new Point(5, 5);            lbl.MouseEnter += new EventHandler(lbl_MouseEnter);            lbl.MouseLeave += new EventHandler(lbl_MouseLeave);            this.Controls.Add(lbl);            this.FormClosing+=new FormClosingEventHandler(Form1_FormClosing);        }        /// <summary>        /// 鼠标移入启动线程(继续已挂起的线程)        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void lbl_MouseEnter(object sender, EventArgs e)        {            if (myThread == null)//启动线程            {                myThread = new Thread(ThreadMethod);                myThread.Start(sender);            }            else { myThread.Resume(); }//继续已挂起的线程        }        /// <summary>        /// 鼠标移出挂起线程        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        void lbl_MouseLeave(object sender, EventArgs e)        {            if (myThread != null) { myThread.Suspend(); }        }        /// <summary>        /// 线程事件每隔1s调用委托        /// </summary>        /// <param name="para"></param>        private void ThreadMethod(object para)        {            MyDelegate myDelegate = new MyDelegate(DelegateMethod);            while (true)            {                this.Invoke(myDelegate, para);                Thread.Sleep(1000);            }        }        /// <summary>        /// 委托事件显示当前时间        /// </summary>        /// <param name="para"></param>        private void DelegateMethod(object para)        {            Label lbl = (Label)para;            lbl.Text = DateTime.Now.ToString();        }        /// <summary>        /// 关闭窗体关闭线程        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void Form1_FormClosing(object sender, FormClosingEventArgs e)        {            if (myThread != null)            {                if (myThread.ThreadState == ThreadState.Suspended)//如果线程处于挂起状态                {                    myThread.Resume();//继续已挂起的线程                }                myThread.Abort();//终止线程            }        }    }}

原创粉丝点击