基于委托的C#异步编程的一个小例子 带有回调函数的例子

我创建的是一个winform测试项目:界面如下:

设置:

下面是代码:

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

namespace AsyncCallbackDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            objMyCal = ExecuteTask;
        }
        //定义一个委托
        public delegate int MyCalculator(int num,int ms);

        //根据委托定义方法,返回一个数的平方
        private int ExecuteTask(int num,int ms)
        {
            Thread.Sleep(ms);
            return num * num;
        }
        MyCalculator objMyCal = null;
        private void button1_Click(object sender, EventArgs e)
        {

            for (int i = 0; i < 11; i++)
            {
                //定义回调函数MyCallBack,传入回调值i
                objMyCal.BeginInvoke(10 * i,1000*1, MyCallBack, i);
            }
        }

        private void MyCallBack(IAsyncResult result)
        {
            //返回结果
            int res = objMyCal.EndInvoke(result);
            Console.WriteLine("第{0}个计算结果为{1}",result.AsyncState.ToString(),res);
        }

    }
}

原文地址:https://www.cnblogs.com/dearbeans/p/9349724.html

时间: 2024-10-12 07:30:26

基于委托的C#异步编程的一个小例子 带有回调函数的例子的相关文章

一个简单的java回调函数的实现

回调函数 回调函数涉及的3个函数 登记回调函数 回调函数 响应回调函数 简单的解释 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货.在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件.回答完毕.来自知乎点击打开链接 代码的实现 首先有一个接口 interface CallB

利用哨兵简化编程的一个小栗子

// 在数组 a 中,查找 key,返回 key 所在的位置 // 其中,n 表示数组 a 的长度 // 我举 2 个例子,你可以拿例子走一下代码 // a = {4, 2, 3, 5, 9, 6} n=6 key = 7 // a = {4, 2, 3, 5, 9, 6} n=6 key = 6 int find(char* a, int n, char key) { if(a == null || n <= 0) { return -1; } // 这里因为要将 a[n-1] 的值替换成 k

python网络编程--管道,信号量,Event,进程池,回调函数

1.管道 加锁可以保证多个进程修改同一块数据时,同一时间只能有一个任务可以进行任务修改,即串行修改,速度慢了,但牺牲了速度却保证了数据安全. 文件共享数据实现进程间的通信,但问题是: 1.效率低(共享数据基于文件,而文件是硬盘上的数据) 2.需要自己加锁处理 而使用multiprocess模块为我们提供的基于消息IPC通信机制:通信和管道 可以帮我们解决这两个问题. 队列和管道都是将数据存放于内存内,而队列又是基于(管道+锁)实现的,可以让我们从复杂的锁问题中解脱出来来,因而队列才是进程间通信的

C#中委托实现的异步编程

所谓同步:如果在代码中调用了一个方法,则必须等待该方法所有的代码执行完毕之后,才能回到原来的地方执行下一行代码. 异步:如果不等待调用的方法执行完,就执行下一行代码. 1.0 同步例子: 1 class Program 2 { 3 private static int Calculate(int a, int b) 4 { 5 Console.WriteLine("1.开始计算!"); 6 7 System.Threading.Thread.Sleep(1000 * 3);//假如计算

.Net Core WebAPI 基于Task的同步&amp;异步编程

await 和 async  异步的实质就是线程的切换(遇到await),同一请求下,异步和同步的执行时间是一样的,但有人说异步可以提高XXX性能,但具体是什么性能呢?又说不上来,其实就只提高并发量,并不能提升你应用程序处理的速度 使用异步的目的是用尽量少的线程保证相同的并发量. 线程的总数少了,线程切换消耗的资源就小了,相对来提供给客户任务的资源就多了,性能就在这里. CPU 在大量线程的情况下,20%的时间片在线程切换上,客户任务有80%的资源使用. 减少了线程数,只有5%的时间片消耗在线程

使用异步编程实现一个加法运算

加法用法 :两个数先后生成,生成这两个数给随机的延迟,等两个数都生成完后再计算结果 public MainWindow() { InitializeComponent(); } Random rnd = new Random(); int aa, bb, cc; public async Task GetA() { await Task.Run(async () => { await Task.Delay(rnd.Next(1000)); aa = rnd.Next(100); }); a.Te

[原创]基于html5新标签canvas写的一个小画板

最近刚学了canvas,写个小应用练习下 源代码 1 <!DOCTYPE> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>無標題文件</title> 6 <script src="http://ajax.googleapis.co

一个简单的jQuery回调函数例子

jQuery回调函数简单使用 比如说,我们想要点击某个按钮后触发事件, 先把一些指定内容给隐藏掉, 然后跳出相关信息的对话框. 如果使用普通的方法, 不用回调函数的话, 会有怎么样的效果呢? 效果是先弹出对话框再隐藏内容, 然后再隐藏指定内容. 这显然不是我们想要的效果, 如果使用回调函数,就可以解决这个问题. 当然,回调函数功能远不只这么简单…… 具体的代码如下: [html] view plain copy <%@ page language="java" import=&q

利用 Python yield 创建协程将异步编程同步化

在 Lua 和 Python 等脚本语言中,经常提到一个概念: 协程.也经常会有同学对协程的概念及其作用比较疑惑,本文今天就来探讨下协程的前世今生. 首先回答一个大家最关心的问题:协程的好处是什么? 通俗易懂的回答: 让原来要使用 异步 + 回调 方式写的非人类代码,可以用看似同步的方式写出来. 1.回顾同步与异步编程 同步编程即线性化编程,代码按照既定顺序执行,上一条语句执行完才会执行下一条,否则就一直等在那里. 但是许多实际操作都是CPU 密集型任务和 IO 密集型任务,比如网络请求,此时不