zoukankan      html  css  js  c++  java
  • C#同步、异步编程

        
    同步编程
    public partial class Form1 : Form { public Form1() { InitializeComponent(); } //同步执行 private void btnExcu_Click(object sender, EventArgs e) { lab1.Text = add(10,10).ToString(); lab2.Text = jianf(10, 10).ToString(); } private int add(int a,int b) { return a + b; } private int jianf(int a,int b) { //调用thread类中的Sleep()方法来给方法2延迟5000毫秒 System.Threading.Thread.Sleep(5000); return a * b; }

    效果如下:

      

    代码分析:

        当我点击同步显示的时候,由于方法2延迟了5000毫秒,所有label1和label2会等待5000毫秒后在一同显示,其他的按钮点之没有反应。

       异步显示
    
     public partial class Form1 : Form
        {
            //【1】定义委托
            public delegate int adddelegate(int a,int b);
            public Form1()
            {
                InitializeComponent();
            }
    
            //同步执行
            private void btnExcu_Click(object sender, EventArgs e)
            {
                lab1.Text = add(10,10).ToString();
                lab2.Text = jianf(10, 10).ToString();
            }
            //【2】根据委托定义委托方法
            private int add(int a,int b)
            {
                return a + b;
                     
            }
    
            private int  jianf(int a,int b)
            {
                //调用thread类中的Sleep()方法来给方法2延迟5000毫秒
                System.Threading.Thread.Sleep(5000);
                return a * b;
    
            }
    
            //【3】异步调用
            private void btnExcu2_Click(object sender, EventArgs e)
            {
                //通过委托异步调用方法
                //委托类型的BeginInvoke(输入和输出变量)
                //第一个参数10 表示委托方法的实参。
                //第二个参数Callback:回调函数,表示异步调用后自动调用的函数
                //第三个参数AsyncState:用户向回调函数提供参数信息
                //返回值:IAsyncResult:异步操作状态接口,封装了异步执行的参数
    
                //创建委托变量,并指向方法
                adddelegate my = jianf;     
                //异步调用任务  需要用到接口IAsyncResult
                IAsyncResult resul = my.BeginInvoke(10,10,null,null);
                this.lab1.Text = "正在计算,请稍等...";
    
                //同时执行其他任务
                this.lab2.Text = add(10,10).ToString();
                //获取异步执行的结果  EndInvoke返回一个int类型 参数是接口
                //委托类型的EndInvoke()方法:借助于IAsyncResult接口对象,不断的查询异步调用是否结束。
                int re= my.EndInvoke(resul);
                this.lab1.Text = re.ToString();
    
            }
        }

  • 相关阅读:
    asp.net
    Angualr ng-bind-html样式不加载解决办法
    angualr 单页面跳转(仿weui切换动画)
    很多人再找的6位框输入密码 类似于支付时候的输入密码框
    angual+mui 双栏上拉加载,微信里面禁用默认事件可用,可以防止浏览器回弹效果
    单页面跳转添加返回和跳转动画(仿app) 只对单页面和跳转有用,我用的是angualr,有不会的可以私信问我。
    文字前后对齐
    angual+ mui 导航切换实现上拉加载
    ajax监听上传进度
    Echais 点击legend
  • 原文地址:https://www.cnblogs.com/xiaowie/p/9377587.html
Copyright © 2011-2022 走看看