Özel denetimimin veri kaynağı olarak kullanılan bir görünüm modelim var. Görünüm modelinin yapıcısında bir WMI ManagementEventWatcher
kurdum ve başlatıyorum. Görünüm modelim IDisposable
'u uygular, bu yüzden izleyiciyi Dispose yönteminde durdururum.Modeli nasıl düzgünce temizlerim?
Özel denetimi bir pencereye gömdüğümde ve ardından uygulamadan çıkmak için pencereyi kapattığımda, bir "InvalidComObjectException
" ifadesi, "Temel RCW'den ayrılmış COM nesnesi kullanılamaz" ifadesini atar. Bu benim izleyicimden kaynaklanıyor ve eğer onu yaratmazsam, bir istisna yok. yığın izlemesi, vb. gibi istisna hakkında ek bilgi yoktur.
Tahmincim, izleyicinin kullandığı iş parçacığı sona erene kadar ancak izleyici durdurulmadan önce görünüm modelini tutan bir şeydir ve nasıl yapılacağını bilmiyorum Bunu hallet.
Herhangi bir öneri? Teşekkür Konstantin
public abstract class ViewModelBase : IDisposable, ...
{
...
protected virtual void OnDispose() { }
void IDisposable.Dispose()
{
this.OnDispose();
}
}
public class DirectorySelector : ViewModelBase
{
private ManagementEventWatcher watcher;
private void OnWMIEvent(object sender, EventArrivedEventArgs e)
{
...
}
protected override void OnDispose()
{
if (this.watcher != null)
{
this.watcher.Stop();
this.watcher = null;
}
base.OnDispose();
}
public DirectorySelector()
{
try
{
this.watcher = new ManagementEventWatcher(new WqlEventQuery(...));
this.watcher.EventArrived += new EventArrivedEventHandler(this.OnWMIEvent);
this.watcher.Start();
}
catch (ManagementException)
{
this.watcher = null;
}
}
}
, hangi dilde çalıştığınızı bilmek güzel olurdu;) ama yine de ... bir "görünüm modeli"? Söylemek istediğiniz gibi gerçekten ayrılmak zorunda olan şeyleri karıştırmak gibi ... –
C# kullanıyorum. WPF için bir dizin seçici kontrolünde çalışıyorum ve bu kontrol, sürücü bağlantılarını ve bağlantılarını kaldırabilmeli ve cd-rom ekleme/çıkarma işlemlerini gerçekleştirebilmelidir. UI'yi koddan ayırmanın tercih edilen yolu MVVM olduğundan, sürücüler, dizinler vb. listesini döndüren ve sürücüleri izleyen bir görünüm modeli kullanıyorum. – akonsu