2012-09-18 4 views

答えて

6

はい、正しい構文です。ただし、ラムダは循環参照を導入し、メモリが解放されないようにするため、ラムダの代わりに関数ハンドラを使用することをお勧めします。一般的に

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh755799.aspx

は、それはあなたが円形 参照を避けるために細心の注意を払うしない限り、イベントハンドラのために指定された関数ではなく、ラムダ、 を使用することをお勧めします。名前付き関数は "this"ポインタをweakの 参照でキャプチャしますが、ラムダは強い参照でキャプチャし、 は循環参照を作成します。詳細については、Weak 参照とブレークサイクル(C++/CX)を参照してください。

4

これは私がやったことです。

animation->Completed += ref new EventHandler<Object^>([this](Object^, Object^) 
{ 
    animtion->Begin(); 
}); 
+0

上記のThomasPを理解していれば、強力なリファレンスでこれをキャプチャしていないため、潜在的なメモリリークを引き起こす循環参照を作成することはできません。 http://msdn.microsoft.com/en-US/library/windows/apps/hh699859.aspx弱い参照を使用してこれをキャプチャする必要があることを暗示しているようですか? – FuleSnabel

+0

イベントが強い参照を使用することは残念です。いつオブジェクトを生かしておくイベントをしたいですか?それは私のC#の苦情のうちの1つです。 –

+0

私は同じ意見を持っているので、WPFでIWeakEventListenerを導入した理由が間違いないと思います。しかし、それはclunkだ。 (彼らはまた、安全でないIMHOをnull値にする必要があります) – FuleSnabel

関連する問題