私はこのようなイベントを購読します:
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を呼び出すと、新しい変数が作成されます。
では、どうすればこのイベントハンドラーの購読を解除できますか?または、イベントに登録していることを確認して、再度登録する必要がないようにするにはどうすればよいですか?