熠晨

导航

c# 异步编程笔记

  

第一步:定义委托

第二步:根据委托的定义,创建一个方法

第三部:创建委托变量

第四部:在窗口初始化中委托变量方法

第五步:开始异步,设置回调函数

 

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 异步编程
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            /*第四步*/
            this.objdeleTask = new deleTask(Task1);//初始化委托的方法
            /*   或者用匿名的方法
             * this.objdeleTask = (num, ms) =>
                {
                    System.Threading.Thread.Sleep(ms);
                    return num * num;
                };*/
        }
        /*第一步*/
        public delegate int deleTask(int num, int ms);//定义委托

        /*第三步*/
        deleTask objdeleTask = null;//定义委托变量

        /// <summary>
        /// 委托任务
        /// </summary>
        /// <param name="num"></param>
        /// <param name="ms"></param>
        /// <returns></returns>
        /*第二步*/
        private int Task1(int num, int ms)
        {
            System.Threading.Thread.Sleep(ms);
            return num * num;
        }
        /// <summary>
        /// 异步结束回调函数
        /// </summary>
        /// <param name="ia"></param>
        private void CallBack(IAsyncResult ia)
        {
            int res = objdeleTask.EndInvoke(ia); //调取委托计算结果
            Console.WriteLine("i的值{0},计算结果{1}", ((int[])(ia.AsyncState))[1].ToString(), res);//ia.AsyncState是回调参数
            //  label1.Text = res.ToString();这句不调试可以使用,
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 10; i++)
            {
                object ob = new int[] { 1, i };
                /*第五步*/
                objdeleTask.BeginInvoke(i * 10, 1000, CallBack, ob);//触发十个线程,前两个是参数,之后是回调函数的方法名字,以及回调参数
                System.Threading.Thread.Sleep(200);
            }
        }

    }
}

 

posted on 2017-01-22 10:00  熠晨  阅读(189)  评论(0编辑  收藏  举报