zoukankan      html  css  js  c++  java
  • 【转】delegate.BeginInvoke 注意事项

    在工作中经常用到一些异步处理,这时会用到多线程。其实在很多时候都可以使用 delegate.BeginInvoke的方式来实现异步,避免了使用线程类。

    但作为一个基础的知识点,您还是应该注意:

    1、参数传递:
       private Func<int,string> DoSomting;
       private void Do()
       {
          DoSomting = new Func<int,string>(ShowMess);

          AsyncCallback callBack = new AsyncCallback(CallBack);
          IAsyncResult re = DoSomting.BeginInvoke( 10 /*代理所指方法的参数列表*/ , CallBack /*回掉方法*/ , null/*需要给CallBack方法的参数*/ );
          DoSomting.EndInvoke(re);
       }
       private string ShowMess(int value)
       {
          return "测试";
       }
       private void CallBack(IAsyncResult re)
       {
       }
    2、返回值
       获取 EndInvoke 执行后的返回值。
       更改上面的代码,获取ShowMess的返回值

       IAsyncResult re = DoSomting.BeginInvoke( 10 , CallBack  , null);
       var mess = DoSomting.EndInvoke(re);//mess 为ShowMess方法的返回值

    3、BeginInvoke 回掉方法的执行.

       private void CallBack(IAsyncResult re)
       {
                Func<int,string> doSomting = re.AsyncState as Func<int, string>;
                doSomting.EndInvoke(re);

                MessageBox.Show("完成!");
       }

       a、传递参数
          IAsyncResult re = DoSomting.BeginInvoke( 10 /*代理所指方法的参数列表*/ , CallBack /*回掉方法*/ , DoSomting/*需要给CallBack方法的参数*/ );
       b、使用re.AsyncState获取参数.

    4、IAsyncResult 的 AsyncWaitHandle.WaitOne(int,bool);的执行。
       
       int : 表示等待的时间。

       bool: true 在等待int间隔后,如果还未结束,则继续等待。
             false在等待int间隔后,如果还未结束,则终止等待。

  • 相关阅读:
    程序员学习视频教程汇总
    分享一个单机软件试用期计时思路
    C# XML转Json Json转XML XML 转对象 对象转XML
    C# 数独 解法
    C# 炸弹人 winform版
    胃食管反流疾病认识总结
    C# Datagridview combox列 初始化颜色
    C# WPF 坦克大战
    高分辨率食道测压(HRM)
    C# wpf 使用 polyline 做一个贪吃蛇游戏的小蛇移动吃食部分功能
  • 原文地址:https://www.cnblogs.com/xlhblogs/p/2833367.html
Copyright © 2011-2022 走看看