none
Pasar datos entre metodos RRS feed

  • Pregunta

  • Buenos dias estimados, de antemano les agradezco su ayuda.

    Estoy haciendo una aplicación de consola en C#, pero como dice el titulo mi problema esta en pasar datos entre metodos del mismo programa, basicamente esto es lo que estoy haciendo:

    En el metodo "Main", tengo un FileSystemWatcher, que dependiendo el evento que detecte, me carga un dato en una variable de tipo string.

    Tengo otro metodo llamado "AlCambiar", que dependiendo del dato que se haya almacenado en la variable anterior, debe hacer cierto procedimiento.

    El problema es que no se como pasar el dato de la variable que esta en el "Main" al metodo "AlCambiar".

    Espero haberme hecho entender, y nuevamente mil gracias por su ayuda.

    viernes, 9 de marzo de 2018 14:28

Respuestas

  • Ah, tal como lo tienes no puede funcionar. No se entiende bien que es lo que quieres hacerle llegar desde el "Main". Desde luego el "watch" que pretendes leer no tiene ningun sentido. Piensa que el "Main" se ejecuta todo de golpe y la variable cambia de valor tres vaces seguidas sin que haya tiempo de que nadie la lea. Y luego mas tarde, una vez que el Main ha terminado de ejecutarse, si cambia algo en disco entonces en ese momento se dispara la ejecucion de "AlCambiar". Para entonces, ya no existe la variable que habia en el Main, o mejor dicho, sí que existe, pero contiene el último de los valores que se le asignaron, por lo que no tiene sentido que el "AlCambiar" la lea; si pudiera leerla siempre recibiría "ER", que es el valor que tiene en ese momento.

    Me temo que es un problema de base, en el sentido de que no has comprendido como funcionan los eventos y cuándo se disparan.

    EDITADO: Para clarificar un poco más: Cuando ejecutas esta línea:

    Observador.Created += AlCambiar;

    NO se ejecuta AlCambiar. Solo se toma nota de que más adelante (cuando se cree un fichero en disco) habrá que ejecutarlo. Para cuando se ejecute, los valores que tenían las variables en el momento de pasar por esa línea ya se han perdido.

    viernes, 9 de marzo de 2018 16:45
    Moderador

Todas las respuestas

  • Podiias cambiar la VARIABLE de tipo string donde guardas los resultados del FileSystemWatcher por una PROPIEDAD. Y entonces, en el "set" de la propiedad haces una llamada al metodo "AlCambiar", con lo que dicho metodo se dispara cada vez que cambias el valor de la propiedad (y obviamente, desde el "set" le pasas al metodo como argumento el "value" para que sepa que es lo que ha cambiado).
    viernes, 9 de marzo de 2018 14:31
    Moderador
  • Hola Alberto mil gracias por tu respuesta, pero no se como hacer eso, en codigo esto es lo que tengo:

    static void Main(string[] args)
            {
                
                FileSystemWatcher Observador = new FileSystemWatcher(ConfigurationManager.AppSettings["Source"]);
                
                //INSTRUCCIONES PARA LOS EVENTOS DE OBSERVADOR 
                Observador.NotifyFilter = (NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName);
                Observador.Created += AlCambiar;
                string watch = "HS";
                Observador.Deleted += AlBorrar;
                string watch = "HT";
                Observador.Error += OnError;
                string watch = "ER";
                Observador.EnableRaisingEvents = true;
                Console.WriteLine("Presiona <Enter> para detener el monitor de archivos");
                Console.ReadLine();
            }
    
    public static void AlCambiar(object source, FileSystemEventArgs e )
            {
                string watch = Main.watch;
               try
                {
                   if (watch == "HS")
                   {
                      //...AQUI VA LA INSTRUCCION
                   } 
                    ....
            }

    Cómo haria el cambio que me sugieres?,

    Gracias.

    viernes, 9 de marzo de 2018 14:54
  • Ah, tal como lo tienes no puede funcionar. No se entiende bien que es lo que quieres hacerle llegar desde el "Main". Desde luego el "watch" que pretendes leer no tiene ningun sentido. Piensa que el "Main" se ejecuta todo de golpe y la variable cambia de valor tres vaces seguidas sin que haya tiempo de que nadie la lea. Y luego mas tarde, una vez que el Main ha terminado de ejecutarse, si cambia algo en disco entonces en ese momento se dispara la ejecucion de "AlCambiar". Para entonces, ya no existe la variable que habia en el Main, o mejor dicho, sí que existe, pero contiene el último de los valores que se le asignaron, por lo que no tiene sentido que el "AlCambiar" la lea; si pudiera leerla siempre recibiría "ER", que es el valor que tiene en ese momento.

    Me temo que es un problema de base, en el sentido de que no has comprendido como funcionan los eventos y cuándo se disparan.

    EDITADO: Para clarificar un poco más: Cuando ejecutas esta línea:

    Observador.Created += AlCambiar;

    NO se ejecuta AlCambiar. Solo se toma nota de que más adelante (cuando se cree un fichero en disco) habrá que ejecutarlo. Para cuando se ejecute, los valores que tenían las variables en el momento de pasar por esa línea ya se han perdido.

    viernes, 9 de marzo de 2018 16:45
    Moderador