国产探花免费观看_亚洲丰满少妇自慰呻吟_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不會阻塞支線程,所以它只能作為支線程的異步


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 华容县| 吉安市| 贺兰县| 上栗县| 灵宝市| 宜城市| 攀枝花市| 江都市| 宜州市| 汾西县| 吴堡县| 乐昌市| 芮城县| 浙江省| 黄大仙区| 罗山县| 赤壁市| 桃园县| 民和| 尼木县| 阜新市| 玉山县| 揭东县| 陕西省| 丰都县| 日喀则市| 台中县| 胶州市| 花莲县| 抚州市| 时尚| 子长县| 廉江市| 石河子市| 眉山市| 体育| 吐鲁番市| 太保市| 陆河县| 綦江县| 桑植县|