C#延迟执行 1.0版本_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#延迟执行 1.0版本

C#延迟执行 1.0版本

 2014/11/7 0:17:08  KeithMorning  程序员俱乐部  我要评论(0)
  • 摘要:涉及的知识有泛型,委托,多线程实现了延迟执行一个函数,可以指定延迟时间,延迟的usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Threading;namespaceWindowsFormsApplication1{classDelayClass<T>{//publicFunc<T>
  • 标签:C# 执行 版本

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

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


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

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

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

发表评论
用户名: 匿名