zoukankan      html  css  js  c++  java
  • 浅谈AsyncState与AsyncDelegate使用的异同

    对于AsyncState来说,其MSDN的解释为:得到BeginInvoke方法的最后一个参数。而对于AsyncDelegate来说,其MSDN的解释为:得到异步调用的委托对象。也就是异步调用的委托源。

    对于委托的异步调用来说,其BeginInvoke函数无非包括以下内容,BeginInvoke(调用参数,回调函数,Object对象)

    如果想利用AsyncState来还原对象的话,这里的Object对象必须是源委托;如果利用AsyncDelegate的话,这里可以为空,可以为源委托。具体区别请看下面的例子:

    复制代码
    //AsyncState方式还原委托对象
    chatDelegate.BeginInvoke(this, e, new AsyncCallback((iar) =>
    {
    
         ChatDelegate thisDelegate = (ChatDelegate)iar.AsyncState;
         thisDelegate.EndInvoke(iar);
    }), chatDelegate);
    
     //AsyncDelegate方式还原委托对象
    chatDelegate.BeginInvoke(this, e, new AsyncCallback((iar) =>
    {
         AsyncResult ar = (AsyncResult)iar;
         ChatDelegate thisDelegate = (ChatDelegate)ar.AsyncDelegate;
         thisDelegate.EndInvoke(iar);
    }), null);
    复制代码

    可以看到,当利用AsyncState时候,最后一个对象必须为源委托;当利用AsyncDelegate的时候,最后一个对象可以为null.

  • 相关阅读:
    tyvj1117 拯救ice-cream
    codevs3410 别墅房间
    codevs1099 字串变换
    codevs1226 倒水问题
    codevs2449 骑士精神
    codevs1225 八数码难题
    Wikioi 3776 生活大爆炸版石头剪子布
    codevs1197 Vigenère密码
    枚举 + exgcd
    C++ 排序引用的优化
  • 原文地址:https://www.cnblogs.com/Arlar/p/6084920.html
Copyright © 2011-2022 走看看