Ejecutar código al inicio.

30/06/2004 - 07:33 por Aníbal | Informe spam
Hola,
Cuando mi programa se inicia quiero ejecutar una instancia de la clase
FileSystemWatcher por cada disco rigido que exista en la maquina, establecer
sus propiedades y controlar sus eventos (para cada instancia); pero tengo el
problema que al no saber cuantos HD (o particiones) puede haber en una
maquina, obiamente no puedo saber cuantas variables voy a tener que definir
sino hasta que se ejecute el programa y eso sin contar el problema de los
eventos.

¿Sugerencias?

Preguntas similare

Leer las respuestas

#6 Aníbal
01/07/2004 - 20:07 | Informe spam
Gracias a los dos por la ayuda, pero hay algo que no entiendo:
Si las instancias de FileSystemWatcher estan definidas dentro de el bucle
For Each,
¿No tendrían que dejar de existir una vez que termina el bucle?


"Aníbal" escribió en el mensaje
news:
Hola,
Cuando mi programa se inicia quiero ejecutar una instancia de la clase
FileSystemWatcher por cada disco rigido que exista en la maquina,


establecer
sus propiedades y controlar sus eventos (para cada instancia); pero tengo


el
problema que al no saber cuantos HD (o particiones) puede haber en una
maquina, obiamente no puedo saber cuantas variables voy a tener que


definir
sino hasta que se ejecute el programa y eso sin contar el problema de los
eventos.

¿Sugerencias?


Respuesta Responder a este mensaje
#7 Tristan
01/07/2004 - 20:36 | Informe spam
No, Anibal.

Las instancias en .net solo se pueden destruir cuando no hay ninguna
referencia a ellas. Al activar EnableRaisingEvents, se debe crear alguna
referencia interna. Algo similar pasa con un Form. Se suelen instanciar los
form usando referencias locales y no por eso se destruyen al salir del
ámbito.

En realidad FileSystemWatcher es una clase IDisposable. La forma de destruir
un objeto de ese tipo es mediante Dispose().

De todas formas, si lo prefieres, puedes mantener un ArrayList con las
referencias a los FileSystemWatcher. Sería útil, por ejemplo, si necesitaras
hacer Dispose de estos objetos.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#8 Aníbal
01/07/2004 - 21:25 | Informe spam
Hola Tristan,
Gracias por contestar, tengo una última duda,
Si yo creo instancias de una clase en la forma de el ejemplo de Eduardo o el
tuyo, como hago para acceder a cada instancia en cualquier momento. Me
explico:

Al hacer:

For i = 1 to 10
Dim objNuevo As New MyClase
Next

Cuando se salga del bucle, la variable objNuevo va a contener la instancia
de MyClase número 10, de manera que en cualquier parte del código puedo
acceder a esta instancia por ejemplo haciendo 'MsgBox(objNuevo.Propiedad)';
Pero para las 9 instancias anteriores ¿Como hago para saber donde estan y
acceder a sus interfaces desde cuaquier parte del código?

Gracias otra vez.

"Tristan" escribió en el mensaje
news:
No, Anibal.

Las instancias en .net solo se pueden destruir cuando no hay ninguna
referencia a ellas. Al activar EnableRaisingEvents, se debe crear alguna
referencia interna. Algo similar pasa con un Form. Se suelen instanciar


los
form usando referencias locales y no por eso se destruyen al salir del
ámbito.

En realidad FileSystemWatcher es una clase IDisposable. La forma de


destruir
un objeto de ese tipo es mediante Dispose().

De todas formas, si lo prefieres, puedes mantener un ArrayList con las
referencias a los FileSystemWatcher. Sería útil, por ejemplo, si


necesitaras
hacer Dispose de estos objetos.

Juan Carlos Badiola
MVP - C#


Respuesta Responder a este mensaje
#9 Tristan
02/07/2004 - 12:12 | Informe spam
En realidad te lo he contestado en el mensaje anterior.
Guardando las instancias en una colección, por ejemplo un
ArrayList:

Private lista as new ArrayList()

For i = 1 to 10
Dim objNuevo As New MyClase
lista.Add(objNuevo)
Next

Posteriormente cuando lo necesites:

MsgBox(DirectCast(lista(3), MyClase).Propiedad)

Si usas Strict Off, puedes ahorrar el DirectCast, cosa
que no te recomiendo. Si quieres hilar fino, puedes crear
una colección tipada, derivando tu propia clase de
CollectionBase, para no necesitar el casting.

Por si tienes dudas, no estás duplicando ningún objeto.
Los objetos son tipos referencia, lo que guardas en el
arraylist es una referencia a la misma instancia a la que
referencia objNuevo.

De todas formas, en tu caso, no tengo muy claro para que
podría servir acceder posteriormente a los
FileSystemWatcher.
Respuesta Responder a este mensaje
#10 Aníbal
03/07/2004 - 01:51 | Informe spam
Muchas Gracias.


"Tristan" escribió en el mensaje
news:2517c01c4601d$1bf29fa0$
En realidad te lo he contestado en el mensaje anterior.
Guardando las instancias en una colección, por ejemplo un
ArrayList:

Private lista as new ArrayList()

For i = 1 to 10
Dim objNuevo As New MyClase
lista.Add(objNuevo)
Next

Posteriormente cuando lo necesites:

MsgBox(DirectCast(lista(3), MyClase).Propiedad)

Si usas Strict Off, puedes ahorrar el DirectCast, cosa
que no te recomiendo. Si quieres hilar fino, puedes crear
una colección tipada, derivando tu propia clase de
CollectionBase, para no necesitar el casting.

Por si tienes dudas, no estás duplicando ningún objeto.
Los objetos son tipos referencia, lo que guardas en el
arraylist es una referencia a la misma instancia a la que
referencia objNuevo.

De todas formas, en tu caso, no tengo muy claro para que
podría servir acceder posteriormente a los
FileSystemWatcher.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida