Tengo un modelo de vista que se utiliza como fuente de datos para mi control personalizado. En el constructor del modelo de vista configuro un WMI ManagementEventWatcher
y lo inicio. Mi modelo de vista implementa IDisposable
, por lo que detengo al observador en el método Dispose.cómo limpiar el modelo de vista correctamente?
Cuando incrusto el control personalizado en una ventana, y luego cierro la ventana para salir de la aplicación arroja un InvalidComObjectException
diciendo "No se puede usar el objeto COM que se ha separado de su RCW subyacente". Esto sucede debido a mi observador, y si no lo creo, no hay excepción. no hay información adicional sobre la excepción como el seguimiento de pila, etc.
Supongo que algo mantiene el modelo de vista hasta que el hilo que utiliza el observador termina pero antes de que el observador se detenga, y no sé cómo maneja esto.
¿Algún consejo? Gracias 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;
}
}
}
sería bueno saber en qué idioma estás trabajando;) pero de todos modos ... ¿un "modelo de vista"? suena como si estuvieras mezclando cosas que realmente deberían separarse ... –
estoy usando C#. Estoy trabajando en un control selector de directorio para WPF, y este control debe poder manejar montajes y desmontajes de unidades, e inserciones/extracciones de CD-ROM. ya que MVVM es la forma preferida para separar la IU del código, estoy usando un modelo de vista que devuelve la lista de unidades, directorios, etc. y supervisa las unidades. – akonsu