Saltar al contenido principal

 none
Referencia a objeto no establecida como instancia de un objeto RRS feed

  • Pregunta

  • saludos. FAVOR AYUDAR..

    //lo que estoy tratando de hacer es un bucle FOR que hace una pausa para que yo le introduzca los datos a un formulario llamado FORM2//que estoy llamando en el bucle.. el proyecto esta en capas..

    //Si yo llamo la funcion  detenerPerdida()  desde el mismo FORM1 TODO TRABAJA BIEN. EL PROBLEMA ES DESDE EL //OTRO FORM2.

    //SI FALTA ALGUNA LLAVE FUE QUE SE ME QUEDO EN EL COPY PASTE

    // FORM1

    public TaskCompletionSource<bool> _tcs;

    private async void guardarPociciones()
            {

     try
                        {
                            int pos1 = int.Parse(TXT_POS_FROM.Text);
                            int pos2 = int.Parse(TXT_POS_TO.Text);
                            string perdida1 = TXT_PERDIDA.Text;
                            

                            for (int i = pos1; i <= pos2; i++)
                            {
                                P_GuardarPerdidas guardarPerdida = new P_GuardarPerdidas();
                                guardarPerdida.Show();

                                _tcs = new TaskCompletionSource<bool>();
                                await _tcs.Task;

                                perdida1 = E_Registros.perdidaPos;

                                guardarPocisiones.guardarPocisiones(pos1, TXT_DESTINO.Text, 
                                    TXT_DISTANCIA.Text, perdida1, Convert.ToInt32(CBX_STATUS.SelectedValue.ToString()),
                                    TXT_CONECTOR.Text, TXT_HILO.Text, Convert.ToInt32(CBX_PANEL_UBI.SelectedValue.ToString()),
                                    Convert.ToDateTime(DT_FECHA_TERM.Text), Convert.ToInt32(CBX_TERMINADO_POR.SelectedValue.ToString()),
                                    TXT_OTRO.Text, TXT_DETALLES.Text, CBX_TERMINADO_POR.Text + " " + CBX_TERMINADO_POR.SelectedValue.ToString(),
                                    TXT_UBICACION_GPS.Text);

                               
                                pos1 = pos1 + 1;
                            }

                            MessageBox.Show("Los datos fueron guardados correctamente");
                            TXT_POS_FROM.Clear();
                            TXT_POS_TO.Clear();
                            TXT_DESTINO.Clear();
                            TXT_DISTANCIA.Clear();
                            TXT_PERDIDA.Clear();
                            TXT_CONECTOR.Clear();
                            TXT_HILO.Clear();
                            TXT_DETALLES.Clear();
                            TXT_OTRO.Clear();
                            TXT_UBICACION_GPS.Clear();
                        }
                        catch (FormatException e)
                        {
                            MessageBox.Show("El formato introducido no es el corrrecto");
                        }
                    }



            // ESTO ES UNA FUNCION PARA PAUSA Y AGREGAR LOS DATOS LUEGO
            public void detenerPerdida()
            {
               this._tcs.SetResult(false);
            }

    //FORM2

    //ESTO ES EN EL OTRO FORM PARA QUE CUANDO LE DE A GUARDAR DATOS CONTINUE EL BUCLE CON LAS DEMAS LECTURAS

    private void BTN_GUARDAR_PER_Click(object sender, EventArgs e)
            {
                E_Registros.perdidaPos = TXT_GUARDARPER.Text;
                this.Close();
     
                P_PRINCIPAL perdida = new P_PRINCIPAL();
       
                perdida._tcs.SetResult(false);
            }

    jueves, 14 de noviembre de 2019 4:36

Respuestas

Todas las respuestas

  • ¿En que línea te da el error?

    Ese tipo de error se da cuando se usa un objeto que no se ha instanciado previamente.


    Saludos, Javier J

    jueves, 14 de noviembre de 2019 7:28
  • Es importante saber en qué línea exactamente ocurre el error. El mensaje indica que alguna de las variables que se usan en esa sentencia vale null, y a pesar de ser null estás intentando acceder a su contenido.

    Una vez que señales en qué línea ocurre y examines con el debugger las variables a ver cuál es null, entonces hay que analizar la lógica del programa a ver cómo se ha llegado hasta ahí sin haberle asignado un valor a la variable en cuestión.

    jueves, 14 de noviembre de 2019 7:56
    Moderador
  • hola

    Ayudaria conocer en que linea te marca el problema

    Pero mas alla de eso analizando el codigo que nos proporcionas observo que nunca haces el new para la variable "guardarPocisiones", donde la instancias? porque sino lo haces esta queda en null generando justamente el mensaje de error que mencionas

    Por otro lado, para que usas el TaskCompletionSource? no le veo ninguna utilidad usar task sin sentido

    Veo que abres un form P_GuardarPerdidas, dentro de un foreach, eso esta muy raro, si usas forms no tiene sentido usar task porque no hay nada que lanzar en un thread

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 14 de noviembre de 2019 10:52
  • // en este metodo
            public void detenerPerdida()
            {
               this._tcs.SetResult(false);  //aqui exactamete da el error. el error es solo si llamo el metodo desde otro FORM
            }


    ElvinR

    viernes, 15 de noviembre de 2019 4:15
  • estoy llamando un FORM varias veces dentro de un bucle. porque cada ves que recorra la linea necesito cambiarle de valor a una variable

    ElvinR

    viernes, 15 de noviembre de 2019 4:17
  • Bien, entonces ya está claro por qué falla.

    La causa inmediata del error es porque _tcs es null.

    ¿Y por qué es null? Pues porque el valor se lo asignas dentro del bucle. Si llamas al método antes de entrar en el bucle, esa variable es null.

    Y sí, lo estás llamando antes de entrar en el bucle. Fíjate que donde haces la llamada la haces así:

    P_PRINCIPAL perdida = new P_PRINCIPAL();
    perdida._tcs.SetResult(false);

    La primera de estas dos líneas crea una nueva instancia del form, y entonces llamas a _tcs en esa nueva instancia, que está recién creada y no es la misma que estaba ejecutando el bucle, por lo que _tcs no se ha inicializado dentro de ella y es null.

    viernes, 15 de noviembre de 2019 7:40
    Moderador
  • Resuelto................gracias 

    ElvinR

    sábado, 16 de noviembre de 2019 20:45