• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#同步、异步编程

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
    
同步编程
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();

        }
    }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
贮油点问题(C++)发布时间:2022-07-13
下一篇:
C#实现拍照并且存水印照片发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap