2011-03-30 24 views
6

MVVM modelini izleyerek, Görünüm Modeli'nden gelen bir talebe yanıt olarak Görünüm penceresinin alt penceresini görüntülemeye çalışıyorum.Bu kodlama stili bir bellek sızıntısına neden olur

istek şekilde View yapıcısı çocuk penceresini görüntülemek için Kayıt edecek MVVM-Light Messenger Görünümü kullanma:

InitializeComponent(); 
Messenger.Default.Register<EditorInfo>(this, (editorData) => 
{ 
    ChildWindow editWindow = new EditWindow(); 
    editWindow.Closed += (s, args) => 
    { 
     if (editWindow.DialogResult == true) 
      // Send data back to VM 
     else 
      // Send 'Cancel' back to VM 
    }; 

    editWindow.Show(); 
}); 

bir Lambda sorunlara neden kullanarak ChildWindow Kapalı olayı abone mu çöp toplama için. Ya da başka bir deyişle, eğer (hiç) editWindow'un ilgisiz kaldığı ve böylece çöp toplama için bir aday olacağı zaman.

cevap

4

editWindowthis bir başvuru tutacak, ama hiçbir şey editWindow bir başvuru olacak, bu yüzden en sonunda çöp toplanacak ve this referans silinecek. herhangi bellek sızıntısına neden olmamalıdır Yani ...

Emin olmak istiyorsan

hiçbir sorun olacaktır, etkinliğe aboneliğinden çıkabilirsiniz:

InitializeComponent(); 
Messenger.Default.Register<EditorInfo>(this, (editorData) => 
{ 
    ChildWindow editWindow = new EditWindow(); 
    EventHandler handler = (s, args) => 
    { 
     editWindow.Closed -= handler; 
     if (editWindow.DialogResult == true) 
      // Send data back to VM 
     else 
      // Send 'Cancel' back to VM 
    }; 

    editWindow.Closed += handler; 

    editWindow.Show(); 
}); 
İlgili konular