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();//终止线程
}
}
}
}