• c# 异步编程 使用回调函数例子


    环境VS2010,

    在项目属性中输出类型选择控制台应用程序

    运行结果

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace _02_AsyncCallbackDemo
    {
    public partial class Form1 : Form
    {
    //3.声明一个全局委托变量
    MyDel mydel = null;
    public Form1()
    {
    InitializeComponent();
    //4.实例化委托
    mydel = MyExecute;

    }

    private void button1_Click(object sender, EventArgs e)
    {
    for(int i=1;i<11;i++)
    {//5.通过mydel 委托异步执行十次方法,每个方法结束都通过他的回调函数返回结果
    mydel.BeginInvoke(10 * i, 1000 *i, MyCallback, i);  //委托的beginInvoke()方法参数3是专门设置回调函数的,并且这个委托会把执行后的结果作为参数传递给此回调函数;参数4是一个调用状态Asyncstate,只要是Object就可以。一旦参数3不为空,参数4就必须不为空
    }

    }

    //1.定义一个委托
    public delegate int MyDel(int num,int ms);
    //2.根据委托定义方法
    private int MyExecute(int num, int ms)
    {
    System.Threading.Thread.Sleep(ms);
    return num * num;
    }
    //6.定义方法的回调函数,注意回调函数其实也是一个方法,他没有返回值类型,
    private void MyCallback(IAsyncResult result)
    {
    int res = mydel.EndInvoke(result); //注意: BeginInvoke和EndInvoke必须成对调用.即使不需要返回值EndInvoke还是必须调用,否则可能会造成内存泄漏。
    Console.WriteLine("第{0}个计算结果是:{1}", result.AsyncState.ToString(), res);
    }
    }
    }

  • 相关阅读:
    Springboot+bootstrap界面版之增删改查及图片上传
    springboot整合Redis
    springboot配置数据库连接池druid、整合mybatis、整合pagehelper
    springboot模板
    springboot入门及配置文件介绍
    java自定义注解
    Git集成idea
    Git的基本操作
    Shiro授权及注解式开发
    《算法》-- 总结
  • 原文地址:https://www.cnblogs.com/arcticfish/p/10862055.html
Copyright © 2020-2023  润新知