コンピュータや音楽の事書いてます

SlideShowNextSlide 内でのスライド遷移による無限ループ回避

何らかの理由で一時的にスライド遷移を禁止したいので、遷移したときに瞬時に元にもどす処理。
SlideShowNextSlide 内で、GotoSlide()すると、再びSlideShowNextSlide イベントが発生する為、無限ループしてしまう。
それを回避する為に普通考えるのは、イベントの一時無効化だが、

int lastSlideNum;
private void Application_SlideShowNextSlide(SlideShowWindow Wn)
{
  if(何らかの理由){
    app.SlideShowNextSlide -= form.Application_SlideShowNextSlide;
    Wn.View.GotoSlide(lastSlideNum, MsoTriState.msoFalse);
    app.SlideShowNextSlide += form.Application_SlideShowNextSlide;
    return;
  }
  lastSlideNum = Wn.View.CurrentShowPosition;
  //本来の処理
}

イベントハンドラを解除したはずなのに、再びイベントが発生し、無限ループしてしまう。原因は不明なので、別の方式にした。

int lastSlideNum;
private void Application_SlideShowNextSlide(SlideShowWindow Wn)
{
  if (lastSlideNum == Wn.View.CurrentShowPosition) return; //遷移の強制戻しの際はイベント抑止
  if(何らかの理由){
    Wn.View.GotoSlide(lastSlideNum, MsoTriState.msoFalse);
    return;
  }
  lastSlideNum = Wn.View.CurrentShowPosition;
  //本来の処理
}