Phi*_*gan 86 c# asynchronous event-handling
如果我设置了多个事件处理程序,如下所示:
_webservice.RetrieveDataCompleted += ProcessData1;
_webservice.RetrieveDataCompleted += ProcessData2;
Run Code Online (Sandbox Code Playgroud)
事件RetrieveDataCompleted被触发时处理程序的运行顺序是什么?它们是否在同一个线程中运行并按顺序运行?
Ree*_*sey 122
目前,它们按照注册顺序执行.但是,这是一个实现细节,我不会依赖于此行为在未来版本中保持不变,因为规范不要求它.
Nas*_*adi 11
您可以通过分离所有处理程序,然后按所需顺序重新附加来更改排序.
public event EventHandler event1;
public void ChangeHandlersOrdering()
{
if (event1 != null)
{
List<EventHandler> invocationList = event1.GetInvocationList()
.OfType<EventHandler>()
.ToList();
foreach (var handler in invocationList)
{
event1 -= handler;
}
//Change ordering now, for example in reverese order as follows
for (int i = invocationList.Count - 1; i >= 0; i--)
{
event1 += invocationList[i];
}
}
}
Run Code Online (Sandbox Code Playgroud)
订单是任意的.您不能依赖从一次调用到下一次调用的任何特定顺序执行的处理程序.
编辑:而且 - 除非这只是出于好奇 - 你需要知道的事实表明一个严重的设计问题.
| 归档时间: |
|
| 查看次数: |
42842 次 |
| 最近记录: |