我订阅了这样的活动:
private void CoupleOverlay(IMapVisual mapVisual)
{
overlay.DrawTilesProgressChanged += (s, e) =>
{
mapVisual.DrawingProgress = e.ProgressPercentage;
};
}
该应用程序可能会多次调用 CoupleOverlay 事件,因此我需要取消订阅 DrawTilesProgressChanged 事件并再次订阅,但因为它是一个匿名事件,我无法取消订阅。我试图转换为
private void CoupleOverlay(IMapVisual mapVisual)
{
overlay.DrawTilesProgressChanged -=overlay_DrawTilesProgressChanged;
overlay.DrawTilesProgressChanged +=overlay_DrawTilesProgressChanged;
}
private void overlay_DrawTilesProgressChanged(object sender, DrawTilesProgressChangedTileOverlayEventArgs e)
{
mapVisual.DrawingProgress = e.ProgressPercentage;
}
它不起作用,因为方法mapVisual
上的变量无效overlay_DrawTilesProgressChanged
。
如果我将代码更改为
private void CoupleOverlay(IMapVisual mapVisual)
{
EventHandler<DrawTilesProgressChangedTileOverlayEventArgs> drawEvent = (s, e) =>
{
mapVisual.DrawingProgress = e.ProgressPercentage;
};
overlay.DrawTilesProgressChanged -= drawEvent;
overlay.DrawTilesProgressChanged += drawEvent;
}
它不起作用,因为它drawEvent
是一个局部变量,下次我调用 CoupleOverlay 时,它将创建一个新变量。
那么如何取消订阅此事件处理程序?或者我怎么知道我已经订阅了该活动,所以我不需要再次订阅?