国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

委托的異步

2019-11-14 16:37:11
字體:
來源:轉載
供稿:網友

1.委托的異步使用BeginInvoke,這樣程序執行時不需要等待委托的函數執行完以后再執行下一句。

但是委托的異步如果有返回值

 

1
2
3
4
5
PRivate delegate void invokeDelegate();
del = new invokeDelegate(StartMethod);
var re=   del.BeginInvoke(null, null);
MessageBox.Show( del.EndInvoke(re));
 MessageBox.Show("f");

這個時候就會堵塞,等待StartMethod執行完才會走到第5句,沒有體現出異步的功能。

回調函數可以解決這個問題,可以將EndInvoke放在IAsyncCallback中執行,將3,4句改為

1
IAsyncResult ir = id.BeginInvoke(AddComplete, null);

 并添加以下函數:

 

1
2
3
4
5
prvite void AddComplete(IAsyncResult result)
{
      invokeDelegate handler = (invokeDelegate)((AsyncResult)result).AsyncDelegate;
      MessageBox.Show( handler.EndInvoke(result));
 }

 

這樣就函數便不用等待委托執行完,可以先執行第5句。

StartMethod方法如下:

 

1
2
3
4
5
private void StartMethod()
{
     Thread.Sleep(5000);
    MessageBox.Show("c");
 }

委托的BeginInvoke實際上是放在threadpool中的。

2.control的invoke和BeginInvoke都是在主線程上的所以它們都會阻塞主線程(control所在線程)。beginInvoke不會阻塞支線程,所以它只能作為支線程的異步


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金湖县| 天台县| 枣强县| 迁西县| 雅江县| 莒南县| 深州市| 浮梁县| 宕昌县| 海城市| 景泰县| 商河县| 商南县| 邮箱| 南开区| 会宁县| 酉阳| 玛纳斯县| 石林| 桃源县| 榆中县| 张北县| 沙坪坝区| 通城县| 基隆市| 平果县| 左权县| 亚东县| 宁安市| 邵阳市| 上高县| 四子王旗| 芜湖县| 连江县| 达拉特旗| 湟源县| 临西县| 政和县| 陆丰市| 温泉县| 宜章县|