イベント ハンドラーを作成する基本的な方法は 3 つあります。残念ながら、そのコードの作成者は、それらを不適切に混同して、かなり間違っていました。彼が使用すべきだったのは、元の C# バージョン 1 の方法です。
ImageAnimator.Animate(txImage.Image, OnFrameChanged);
これは非常に簡単で理解しやすいものです。確かに、この場合に強く推奨する構文であり、StopAnimate() メソッドを非常に簡単に呼び出すことができます。あなたの質問に答えるには、他の 2 つの方法、つまり使用してはいけない方法を示す必要があります。C# バージョン 2 では、匿名デリゲートを使用して、イベント ハンドラーのコードをインプレースで記述できます。
ImageAnimator.Animate(txImage.Image, delegate {
// Put the OnFrameChanged code here...
});
C# バージョン 3 では、ラムダ式を使用してイベント ハンドラーをインプレースで記述できるようになりました。
ImageAnimator.Animate(txImage.Image, (s, e) => {
// Put the OnFrameChanged code here...
});
それはあなたが尋ねたものです。ラムダ式の (s, e) 部分は、イベント ハンドラーに渡される 2 つの引数を表します。s は送信者、e は EventArgs オブジェクトです。実際にはOnFrameChange コードでこれら 2 つの引数を使用しないため、ラムダ構文は不要であり、匿名デリゲートも同様に機能することに注意してください。ただし、多くの C# プログラマーはラムダ式の使用をやめ、あらゆる場所でラムダ式の構文を使用することを好みます。これは公平です。引数を使用しない場合でも、引数を記述して、ラムダがデリゲートの適切な代替であることをコンパイラに納得させる必要があります。コンパイラを満足させるために、2 つの引数を指定して OnFrameChanged を記述する必要があったのと同じように。
ラムダ式の構文を理解することは、少しスピード バンプになる可能性があります。C# 言語に関するまともな入門書は、私が説明するよりもうまく機能します。
最後になりましたが、この回答には、ImageAnimator クラスをまったく使用せずに PictureBox でアニメーションを一時停止する方法を示すhackorama コードがいくつかあります。これにより、さらに質問が追加される可能性がありますが:)