delegate的調(diào)用方法總結(jié)
1、直接調(diào)用:delegate( args )或者delegate.Invoke( args )
2、異步調(diào)用:delegate.BeginInvoke與delegate.EndInvoke
異步調(diào)用注意:
1答朋、C#的異步調(diào)用是通過(guò)從ThreadPool里取出一個(gè)線程來(lái)完成的。所以無(wú)法對(duì)其最終調(diào)用的順序進(jìn)行預(yù)期美澳。即:如果先后調(diào)用了BeginInvoke(1),BeginInvoke(2),收到的可能先是2陵究,然后才是1。
2奥帘、為了解決這個(gè)問(wèn)題铜邮,可以使用EndInvoke來(lái)保證順序可控。EndInvoke從本質(zhì)上是將本線程阻塞寨蹋,直到子線程返回為止松蒜。
3、BeginInvoke不支持有多個(gè)監(jiān)聽(tīng)的Delegate已旧。
4秸苗、千萬(wàn)要注意,【線程異步】运褪,不等同步【消息循環(huán)異步】惊楼。