青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 195,  comments - 30,  trackbacks - 0
原地址:http://www.cnblogs.com/xiaoli0414/archive/2007/11/27/974534.html

最經(jīng)公司工作需要調(diào)用一個外部的webservice,同時要將傳出的數(shù)據(jù)進行保存,以自己以前的習(xí)慣,就打算逐步操作,失敗啊,完全沒考慮過用戶體驗效果,在同事指點下,意識到使用異步調(diào)用的好處,隨便將自己找的一些資料留以保存,以戒后誤!
        我們要明確,
為什么要進行異步回調(diào)?眾所周知,普通方法運行,是單線程的,如果中途有大型操作(如:讀取大文件,大批量操作數(shù)據(jù)庫,網(wǎng)絡(luò)傳輸?shù)龋紩?dǎo)致方法阻塞,表現(xiàn)在界面上就是,程序卡或者死掉,界面元素不動了,不響應(yīng)了。異步方法很好的解決了這些問題,異步執(zhí)行某個方法,程序立即開辟一個新線程去運行你的方法,主線程包括界面就不會死掉了。異步如何開始,好理解,現(xiàn)在我們討論的是如何結(jié)束這個異步出來的新線程。
       首先,異步出來的新線程,必須回收,不回收是浪費資源的可恥行為,.NET也是不允許的,所以你別想鉆空子,俗話說,請神容易送神難,就是這個道理。下面你可以很容易想到,回收分為2種情況:主動回收和被動回收(當然,這是我自己的理解,微軟可不是這么說的),主動回收就是,你去監(jiān)視那個線程,并且等待,當異步方法完成了,就把異步線程回收,焦點回歸主線程,實際上就是上篇文章《C#異步初步》的那種情況,BeginInvoke之后又EndInvoke,如果在EndInvoke的時候,該異步線程沒有完成操作,那么整個程序,包括主線程,又在阻塞了,又會出現(xiàn)界面“死”的情況。要想解決這個問題,就使用“被動回收”方式,其中一個重要的辦法就是“異步回調(diào)”。
         
核心有二:
    
A、   用回調(diào)函數(shù)(本例中為CallBackMethod
),異步結(jié)束后,自動調(diào)用此回調(diào)函數(shù)。    
    
B、   
而不在主線程中手工等待異步結(jié)束,如上兩例中在主線程中調(diào)用EndInvoke。此種方法,是在回調(diào)函數(shù)中調(diào)用EndInvoke的。
     異步回調(diào)的大概流程是這樣的:首先啟動異步,啟動參數(shù)加上異步結(jié)束時執(zhí)行的方法,然后這個異步線程就不用管了,最后當這個異步線程自己完成工作了,就自動執(zhí)行啟動參數(shù)里的那個方法,這樣確實很省心,可是代碼寫起來,就很復(fù)雜了。
    下面是搜藏的代碼:

 //
首先準備好,要進行異步的方法(能異步的,最好不多線程)
private string MethodName(int Num, out int Num2)
{
               Num2 = Num;
               return "HelloWorld";
}

//程序終點
//異步完成時,執(zhí)行的方法(回調(diào)方法),此方法只能有IAsyncResult一個參數(shù),但是該參數(shù)幾乎萬能,可以傳遞object
private void CallBackMethod(IAsyncResult ar)
{
               //從異步狀態(tài)ar.AsyncState中,獲取委托對象
               DelegateName dn = (DelegateName)ar.AsyncState;
               //輸出參數(shù)
               int i;

               //一定要EndInvoke,否則你的下場很慘
               string r = dn.EndInvoke(out i, ar);
               MessageBox.Show("異步完成嘍!i的值是" i.ToString() ",r的值是" r);
}

//定義與方法同簽名的委托
private delegate string DelegateName(int Num, out int Num2);

//程序入口
private void Run()
{
               //實例化委托并初賦值
               DelegateName dn = new DelegateName(MethodName);
               //輸出參數(shù)
               int i;
               //實例化回調(diào)方法
               //把AsyncCallback看成Delegate你就懂了,實際上AsyncCallback是一種特殊的Delegate,就像Event似的
               AsyncCallback acb = new AsyncCallback(CallBackMethod);
               //異步開始
               //如果參數(shù)acb換成null則表示沒有回調(diào)方法
               //最后一個參數(shù)dn的地方,可以換成任意對象,該對象可以被回調(diào)方法從參數(shù)中獲取出來,寫成null也可以。參數(shù)dn相當于該線程的ID,如果有多個異步線程,可以都是null,但是絕對不能一樣,不能是同一個object,否則異常
               IAsyncResult iar = dn.BeginInvoke(1, out i, acb, dn);
               //去做別的事
               //…………
}

//最后的結(jié)果應(yīng)該是:i=1,r="HelloWorld"


另外,如果可以,定義委托的時候可以選擇不用過多的修飾:

        /// <summary>
        /// 定義委托
        /// </summary>
        /// <returns></returns>
        public delegate bool Asyncdelegate();

        /// <summary>
        /// Callback method must have the same signature as the
        /// AsyncCallback delegate
        /// </summary>
        /// <param name="ar"></param>
        private void CallbackMethod(IAsyncResult ar)
        {
            // Retrieve the delegate.
            Asyncdelegate dlgt = (Asyncdelegate)ar.AsyncState;

            // Call EndInvoke to retrieve the results.
            dlgt.EndInvoke(ar);
        }

  其他方法中調(diào)用:
        //異步執(zhí)行      
        //指定委托方法      
        Asyncdelegate isgt = new Asyncdelegate(icpInfo.Insert);
        IAsyncResult ar = isgt.BeginInvoke(new AsyncCallback(CallbackMethod), isgt);
        
posted on 2011-03-14 11:13 luis 閱讀(376) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

文章分類

文章檔案

友情鏈接

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区激情| 国产精品白丝黑袜喷水久久久| 亚洲激情第一页| 另类激情亚洲| 每日更新成人在线视频| 欧美大片18| 日韩亚洲欧美综合| 一本色道久久综合狠狠躁篇怎么玩| 亚洲精品欧美| 亚洲精品一区二区三区四区高清| 一区二区精品国产| 性做久久久久久| 免费国产一区二区| 国产精品第一区| 精品二区视频| 亚洲一区二区三区在线视频| 久久精品盗摄| 亚洲欧洲美洲综合色网| 午夜精品av| 欧美成人一品| 国产日韩精品一区| 日韩视频一区二区| 久久精视频免费在线久久完整在线看| 欧美大片一区二区| 亚洲——在线| 欧美精品在线免费| 黄色av日韩| 亚洲已满18点击进入久久| 麻豆精品网站| 亚洲一区二区在线免费观看| 免费黄网站欧美| 国产区精品在线观看| 亚洲少妇诱惑| 亚洲高清av| 久久久久久网| 国产一区视频网站| 亚洲一区二区高清| 亚洲国产日韩精品| 欧美成人第一页| 在线观看欧美日本| 久久精品国亚洲| 亚洲网在线观看| 欧美日韩免费精品| 亚洲精品一区二区三区婷婷月| 久久久精品免费视频| 在线亚洲欧美| 欧美日韩中文字幕日韩欧美| 黄色成人在线| 久久精品视频在线| 亚洲一区观看| 欧美午夜精品一区| 日韩一区二区精品| 亚洲高清免费在线| 欧美成人精品不卡视频在线观看 | 国产精品毛片va一区二区三区| 亚洲高清视频的网址| 久久一区激情| 欧美在线三级| 国产一区二区在线观看免费播放| 亚洲淫性视频| 亚洲一区中文| 国产日韩欧美视频| 久久国产精品一区二区三区| 亚洲影院色无极综合| 国产精品hd| 午夜精品久久久久久久久久久| 99在线观看免费视频精品观看| 欧美日韩国产成人在线免费| 99视频精品全部免费在线| 亚洲日韩欧美视频| 欧美日韩在线高清| 小辣椒精品导航| 欧美在线一二三四区| 伊伊综合在线| 亚洲黄色高清| 国产精品扒开腿做爽爽爽视频| 亚洲一线二线三线久久久| 亚洲伊人久久综合| 国产一区二区主播在线| 欧美1区2区| 欧美日韩第一区日日骚| 午夜精品三级视频福利| 欧美一区2区视频在线观看 | 在线观看成人av电影| 欧美成人一区二区在线| 欧美久久电影| 久久99在线观看| 狂野欧美性猛交xxxx巴西| 99精品国产热久久91蜜凸| 亚洲一区在线观看视频| 一区二区三区无毛| av不卡在线观看| 国产日韩精品视频一区| 欧美激情一区二区三区在线视频观看 | 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美91精品| 亚洲国产精品久久久久| 欧美日韩八区| 久久久久www| 欧美人成网站| 久久米奇亚洲| 欧美三级在线视频| 免费看的黄色欧美网站| 欧美日韩在线影院| 亚洲大胆女人| 国产亚洲一区精品| 一区二区三区精品国产| 亚洲电影免费观看高清完整版 | 久久成人亚洲| 亚洲一区在线观看视频| 蜜桃av综合| 久久免费精品日本久久中文字幕| 欧美精品一区二区久久婷婷| 久久亚洲综合色一区二区三区| 国产精品啊啊啊| 亚洲高清视频一区| 国产一区二区av| 亚洲砖区区免费| 一区二区三区毛片| 欧美黄色片免费观看| 免费日韩av电影| 红桃视频成人| 久久精品国产91精品亚洲| 欧美在线一区二区三区| 国产精品久久久久久久7电影| 亚洲第一黄色| 亚洲二区精品| 久久综合五月天婷婷伊人| 久久全球大尺度高清视频| 国产伦精品免费视频| 亚洲——在线| 欧美夜福利tv在线| 国产精品视频你懂的| 亚洲深夜福利| 亚洲一二三区在线观看| 欧美日韩精品国产| av不卡免费看| 午夜老司机精品| 国产女主播一区二区三区| 亚洲在线一区| 久久超碰97中文字幕| 国产在线一区二区三区四区| 午夜久久久久久久久久一区二区| 亚洲欧美久久久| 国产精品爽爽爽| 午夜精品一区二区在线观看 | 国产农村妇女精品一二区| 日韩视频在线一区| 亚洲欧美精品一区| 国产一区二区三区电影在线观看| 久久gogo国模啪啪人体图| 久久五月激情| 亚洲三级影片| 国产精品狼人久久影院观看方式| 亚洲网站在线播放| 久久九九热re6这里有精品 | 欧美一级成年大片在线观看| 国产日本欧洲亚洲| 香蕉久久夜色精品国产使用方法 | 亚洲第一视频| 一区二区三区 在线观看视| 欧美日韩视频在线第一区| 亚洲视频香蕉人妖| 久久综合色综合88| 日韩视频免费在线观看| 国产精品美女久久久久久2018| 亚洲综合日韩| 亚洲国产精品一区| 亚洲免费网址| 91久久极品少妇xxxxⅹ软件| 欧美性视频网站| 久久久精品视频成人| 亚洲国产欧美久久| 狠狠狠色丁香婷婷综合久久五月| 欧美成人激情视频免费观看| 亚洲在线视频网站| 蜜桃伊人久久| 亚洲欧洲99久久| 亚洲狠狠丁香婷婷综合久久久| 欧美日韩一区成人| 久久午夜羞羞影院免费观看| 亚洲视频久久| 欧美国产一区视频在线观看| 欧美在线黄色| 亚洲一区二区三区精品在线观看| 黄色成人91| 国产日韩欧美在线一区| 免费观看一区| 久久综合伊人77777| 亚洲午夜羞羞片| 麻豆久久婷婷| 亚洲永久免费av| 亚洲高清视频一区| 久久婷婷国产麻豆91天堂| 99国产精品久久久| 在线观看欧美激情| 国产性色一区二区| 国产精品成人观看视频免费| 欧美va天堂va视频va在线| 久久成人资源|