实现了延迟执行一个函数,可以指定延迟时间,延迟的
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; namespace WindowsFormsApplication1 { class DelayClass<T> { // public Func<T> action; // public void DelayClass<T>(int i,Func<T> action){ // //setPara(i,action); //} private int time { get; set; }//延迟时间 private T resualt { get;set;}//返回值 private Func<T> func;//传入函数 private T delay(int j,Func<T> action) {///实现函数的运行 T s=default(T); if (action != null) { s= action(); } return s; } private void delayme() { Thread delayThread = new Thread(new ThreadStart(delayDel));//新建一个线程来运行执行延迟时间 delayThread.Start(); } private void delayDel() { //延迟执行的作用 int i=0; while (i < time) { i++; Thread.Sleep(1000); } resualt = delay(time, func); if (gs != null) {//委托传值,当线程延迟time时间后执行返回值,相当于一个事件 gs(resualt); } } public void runthisFunc(int i,Func<T> action) {//设置该类的基本参数,传入时间和方法 time = i; func = action;
delayme(); } public delegate void getresult(T result);//委托传值定义 public getresult gs; } }
基本的原理是利用泛型委托传入需要的参数,用一个新建线程延迟执行,执行完函数用委托做返回值
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { DelayClass<string> dclass = new DelayClass<string>(); dclass.setPara(4,actionme); dclass.gs = gss; } public string actionme() { return "this has wait for 4 s"; } private void gss(string ss) {//接受传回的值,并显示 label1.Invoke(setlabedel, ss);//do something alse } private Action<string> setlabedel;//定义委托,线程不能访问UI private void setlable(string ss) { label1.Text=ss; } private void Form1_Load(object sender, EventArgs e) { setlabedel = setlable; } } }
使用的时候实例化类,传入时间和方法。并实现该类的委托方法,即可调用该方法。
初步实现还需要很多更改,欢迎指正