首页 > 代码库 > C#延迟执行 1.0版本

C#延迟执行 1.0版本

涉及的知识有泛型,委托,多线程

实现了延迟执行一个函数,可以指定延迟时间,延迟的


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;        }    }}

使用的时候实例化类,传入时间和方法。并实现该类的委托方法,即可调用该方法。

初步实现还需要很多更改,欢迎指正

C#延迟执行 1.0版本