LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#异步编程回调函数应用

admin
2025年3月28日 8:32 本文热度 38

回调函数使得程序能在异步操作完成后执行后续处理,可当作执行完成标志。

异步编程是建立在委托的基础上的一种编程方法;异步调用的每个方法都是在独立的线程中执行的,本质上就是一种多线程程序;异步比较适合在后台运行较为耗时的简单任务,并且任务之间相互独立,不能有直接访问可视化控件的代码。
使用回调函数同时执行多个任务。
IAsyncResult result = objCal.BeginInvoke(9 * i, 1000*i, CallBack, i);
这里最后一个参数i给回调函数的字段AsyncState,即i的值就是result.AsyncState。
倒数第二个参数CallBack是自己创建的回调函数,即在for循环每次执行完一次后,要执行的内容。

namespace _011_异步编程进阶{    /*     * 总结:     * 1.异步编程是建立在委托的基础上的一种编程方法。     * 2.异步调用的每个方法都是在独立的线程中执行的。本质上就是一种多线程程序     * 3.比较适合在后台运行较为耗时的简单任务,并且任务之间相互独立,不能有直接访问可视化控件的代码。     * 4.如果后台任务要求必须按照特定顺序执行,或者访问共享资源,则异步不太适合,应选择多线程。     */    public partial class 异步编程进阶 : Form    {        //【1】声明委托        private delegate int delCal(int num, int ms);        public 异步编程进阶()        {            InitializeComponent();            //【3】初始化委托变量            //objCal = Task1;//与下方效果一样,下面是用Lambda写的            objCal = (num, ms) =>            {                Thread.Sleep(ms);                return num * 2;            };        }        //【2】根据委托编写方法,返回一个数的计算值        #region 根据委托编写方法               private int Task1(int num,int ms)        {            System.Threading.Thread.Sleep(ms);            return num * 2;        }        #endregion        //【3】创建委托变量,由于异步函数和回调函数都要用,因此定义为成员变量        private delCal objCal = null;        //【4】同时执行多个任务        private void button1_Click(object sender, EventArgs e)        {            //发布任务            //每次任务执行完后,要有执行完的标志,这个标志放到回调函数中            for (int i = 1; i < 10; i++)            {                //开始异步执行                //最后一个参数的值即为回调函数的AsyncState属性值                IAsyncResult result = objCal.BeginInvoke(9 * i, 1000*i, CallBack, i);//当其执行完后自动执行某个函数,i的值就是IAsyncResult.AsyncState                //最后一个参数i给回调函数的字段AsyncState            }        }        //【5】回调函数        //回调函数,参数类型为IAsyncResult        //每个任务返回时,result都不一样        private void CallBack(IAsyncResult result)        {            int res=objCal.EndInvoke(result);            //显示异步调用结果            //MessageBox.Show($"第{result.AsyncState.ToString()}个计算结果为:{res}");            Console.WriteLine("第{0}个计算结果为:{1}", result.AsyncState.ToString(),res);        }    }}


阅读原文:原文链接


该文章在 2025/3/28 11:32:35 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved