首页 > 代码库 > 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版本
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。