永发信息网

C#中事件可以重进入吗,即A事件在执行,同时B

答案:1  悬赏:40  手机版
解决时间 2021-03-07 05:01
C#中事件可以重进入吗,即A事件在执行,同时B
最佳答案
C#中大部分情况使用提“多播”方式的事件。也就是通过+=进行事件绑定,但一般情况下多播事件是顺次执行的,也就是按照+=绑定的事件顺序进行执行。当然你也可以随时使用-=进行解绑。
所以事件(实际上是一个委托),多播事件是多个委托进行顺次执行。所以从严格的角度上说A事件在执行时,B不可能在同时也在执行!我这里有两个关键词:严格概念角度和事件(委托)。但在业务角度上来说,A业务在执行的过程中B是可以同时执行的。事实上我们知道多谓的多播也是开个线程而已,然后依次执行。我来解释一下为什么多播事件不可以同时执行,但两个业务可以同时执行——我假定你的A事件开一条线程去做A业务,B事件开辟一个新线程执行B业务,那么A事件在结束后,A事件的线程尚未结束,但完全可以执行B事件,而B事件在A事件完成后当然可以开新线程执行B业务,那么此时的状态是A/B两个业务同时执行,但A事件与B事件可能已经结束了!所以,从严格的概念角度上来,AB事件肯定有先后执行顺序的,所以不可能同时有两个事件在执行——但没有说不能有两个业务线程在执行!所以对于你这个问题,从严格概念上来说,多播事件肯定是按委托的绑定顺序执行,不可能出现两个委托同时进行。如果你有类似的需求,那么两种方案可供你选择:
在一个事件中定义两个业务线程:即你的A/B事件都做为一条线程在新的事件中同时开辟(一个线程中开辟多个线程是完全没有问题的)。这种情况并不影响OOP编程思想。
另一种情况就是定义的AB事件中各开一条线程,分别实现不同的业务。正如我上边所讲。该种方案中其实使用是APM(异步编程思想)的思想而已。也就是说AB业务线程分别都是异步线程,不要开同步线程,否则A线程结束后A事件才结束。
所以在编程时要注意,框架是已经定义的,如何使用是一个程序员的能力,而不是想如何在已经存在的框架上去修改,比如你此时肯定在想有什么方法能让两个事件(委托,不是业务线程)同时执行?难道不能同时执行就没有框架不适用或选错了编程语言?这些都不对的!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
AMD Athlon II X4 640 四核主板自动开六核,
只用油炸过的带鱼还能怎么做着吃。
纹唇后能吃什么羊肉吗
蜜菓之蜜制鲜饮胜利路店这个地址在什么地方,
厦门鼓浪屿能受地震影响吗?
A(5,0)B(0,5)C(cosα,sinα)α∈(0,π) 若AC
我想在县城开个米线店请问怎样选位置
小说军嫂杨雪谁有
顶格怎么设置
根据中国的国情状况,说一说:怎样做才能促进
茂名市高州公路局云潭养护站这个地址在什么地
天龙八部逆袭什么时候刷
盗版三国志为什么玩到225年钱都没了
家里没人,回家发现好几样电器烧坏是什么原因
购买徐工25吨吊车的按揭方式
推荐资讯
清洗了三元催化器后,加大油门会冒蓝烟
侗湘土菜馆相城店地址在什么地方,想过去办事
鑫盛鞋店怎么去啊,有知道地址的么
二龙山龙岗寝园公墓地址在哪,我要去那里办事
济南哪里有售CAT鞋的?
株模潭村地址有知道的么?有点事想过去
从经济的角度看,明清时期中国已处于“近代的
学校开运动会,打算买2011瓶饮料给学生,商店规
MP4休闲会所地址在哪,我要去那里办事
凯里市基督教堂在什么地方啊,我要过去处理事
国内四大期货交易所是什么性质的企业?国企还
dnf之流氓剑士有没有实体书
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?