none
La aplicacion se encuentra en modo de interrupcion. RRS feed

  • Pregunta

  • Hola,

    Hasta el día viernes la aplicación funcionaba muy bien,hoy antes de hacer el instalador me dio por probar de nuevo la aplicación y me marca primero este error:"La aplicación se encuentra en modo de interrupción.La aplicación entró en un estado de interrupción, pero no se está ejecutando código admitido por el motor de depuración seleccionado (por ejemplo, solo se ejecuta el código en tiempo de ejecución nativo)."  Luego en un recuadro dice:"Excepción producida.Asistente para la depuración administrada 'ContextSwitchDeadlock': 'The CLR has been unable to transition from COM context 0x8286d8 to COM context 0x828620 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.'"

    Cuando doy click en continuar ejecución me lleva a una parte del código de un botón con el cual inserto unos registros,y ahí me da el error:"System.Data.Entity.Infrastructure.DbUpdateException: 'An error occurred while updating the entries. See the inner exception for details.'"

    1 de 3 excepciones internas:UpdateException: An error occurred while updating the entries. See the inner exception for details.

    2 de 3 excepciones internas:SqlException: Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

    3 de 3 excepciones internas:Win32Exception: The wait operation timed out

    Lo único que hice, fue renombrar la tabla en la cual van a caer esos registros que inserto con ese botón.En una carpeta llamada Model, tenia un ADO.NET Entity Data Model de la tabla a la cual se le insertan los registros.Cuando renombre la tabla, elimine ese ADO.NET y le agregue el nuevo ADO.NET.

    En mi SQL, la tabla se llama Desglose,pero a la hora de llamar dentro del botón con el cual inserto registros me da por default el nombre de"Desgloses"y no Desglose.Leí acerca de To turn pluralization on and off, pero en visual studio 2019 no me sale la seccion en herramientas/opciones/herramientas para bases de datos/Click OR Designer

    Que puede ser el problema?

    Este es el código completo de mi botón con el cual inserto los registros

       private void Btn3_Click(object sender, EventArgs e)
            {
                    
                    {
                        if (TxtBox7.Text.Trim().Equals("") || textBox4.Text.Trim().Equals("") || textBox5.Text.Trim().Equals("") ||
                            TxtBox9.Text.Trim().Equals("") || ComboBox3.Text.Trim().Equals("") || ComboBox1.Text.Trim().Equals("") ||
                            textBox6.Text.Trim().Equals("") || textBox4.Text.Trim().Equals("") || textBox5.Text.Trim().Equals("") ||
                            TxtBox10.Text.Trim().Equals("") || TxtBox11.Text.Trim().Equals("") || TxtBox12.Text.Trim().Equals("") ||
                            TxtBox13.Text.Trim().Equals("") || TxtBox14.Text.Trim().Equals("") || TxtBox15.Text.Trim().Equals("") ||
                            TxtBox16.Text.Trim().Equals("") || TxtBox17.Text.Trim().Equals("") || TxtBox18.Text.Trim().Equals("") ||
                            TxtBox8.Text.Trim().Equals(""))
    
                        {
                            MessageBox.Show("No es posible procesar OP existiendo registros vacios.Valide los datos por favor");
                            return;
                        }
    
                        byte[] file = null;
                        byte[] file1 = null;
                        Stream myStream = OpenFileDialog1.OpenFile();
                        Stream myStream1 = OpenFileDialog2.OpenFile();
                        using (MemoryStream ms = new MemoryStream())
                        {
                            myStream.CopyTo(ms);
                            file = ms.ToArray();
                        }
                        using (MemoryStream ms1 = new MemoryStream())
                        {
                            myStream1.CopyTo(ms1);
                            file1 = ms1.ToArray();
                        }
                        using (Model.PagoProveedoresEntities db = new Model.PagoProveedoresEntities())
                        {
    
                            Model.Desglose oDocumento = new Model.Desglose();
                            oDocumento.Pdf = TxtBox7.Text.Trim();
                            oDocumento.DocumentoPDF = file;
                            oDocumento.NombreRealPDF = OpenFileDialog1.SafeFileName;
                            oDocumento.Xml = textBox5.Text.Trim();
                            oDocumento.DocumentoXML = file1;
                            oDocumento.NombreRealXML = OpenFileDialog2.SafeFileName;
                            oDocumento.Emisor = Lbl2.Text.Trim();
                            oDocumento.Forma_de_Pago = TxtBox1.Text.Trim();
                            oDocumento.Proveedor = ComboBox1.Text.Trim();
                            oDocumento.Banco = TxtBox4.Text.Trim();
                            oDocumento.Clabe_Interbancaria = TxtBox5.Text.Trim();
                            oDocumento.Concepto = ComboBox3.Text.Trim();
                            oDocumento.EstatusAdmin = textBox6.Text.Trim();
                            oDocumento.EstatusDireccion = textBox9.Text.Trim();
                            oDocumento.Fecha_de_Captura = Convert.ToDateTime(DateTimePicker1.Value);
                            oDocumento.IdConcepto = Convert.ToInt32(TextBox18.Text.Trim());
                            oDocumento.RAD = TextBox3.Text.Trim();
                            oDocumento.Id_Usuario = Convert.ToInt32(TxtBox2.Text.Trim());
                            oDocumento.Nombre = textBox1.Text.Trim();
                            oDocumento.Departamento = textBox2.Text.Trim();
                            oDocumento.Factura = TxtBox8.Text.Trim();
                            oDocumento.Descripcion = TxtBox9.Text.Trim();
                            oDocumento.Cantidad = Convert.ToDecimal(TxtBox10.Text.Trim());
                            oDocumento.Precio_Unitario = Convert.ToDecimal(TxtBox11.Text.Trim());
                            oDocumento.Importe = Convert.ToDecimal(TxtBox12.Text.Trim());
                            oDocumento.Descuento = Convert.ToDecimal(TxtBox13.Text.Trim());
                            oDocumento.Subtotal = Convert.ToDecimal(TxtBox14.Text.Trim());
                            oDocumento.IVA = Convert.ToDecimal(TxtBox15.Text.Trim());
                            oDocumento.Retencion_ISR = Convert.ToDecimal(TxtBox16.Text.Trim());
                            oDocumento.Retencion_IVA = Convert.ToDecimal(TxtBox17.Text.Trim());
                            oDocumento.Total = Convert.ToDecimal(TxtBox18.Text.Trim());
                            oDocumento.EstatusFinanzas = textBox7.Text.Trim();
                            oDocumento.FirmaAdministracion = textBox8.Text.Trim();
                            oDocumento.FirmaDireccion = textBox10.Text.Trim();
                            oDocumento.FirmaFinanzas = textBox11.Text.Trim();
                            oDocumento.ComentariosAdmin = textBox12.Text.Trim();
                            oDocumento.ComentariosDireccion = textBox12.Text.Trim();
                            oDocumento.ComentariosFinanzas = textBox12.Text.Trim();
                            db.Desgloses.Add(oDocumento);
                            db.SaveChanges();
                            MessageBox.Show("Capturada correctamente.El ID de la orden es el " + oDocumento.IdOrden);
                        }
    
                        Refresh();
                        TxtBox6.Clear();
                        textBox4.Clear();
                        TxtBox8.Clear();
                        TxtBox9.Clear();
                        TxtBox7.Clear();
                        textBox5.Clear();
                        ComboBox1.SelectedIndex = -1;
                        TxtBox4.Clear();
                        TxtBox5.Clear();
                        TextBox18.Clear();
                        TextBox3.Clear();
                        ComboBox3.SelectedIndex = -1;
                    }
                 
           }
    
    
    

    Las excepciones internas me llevan a esta parte del codigo:

    db.Desgloses.Add(oDocumento);

    db.SaveChanges();

    Gracias de antemano, espero me puedan orientar.

    lunes, 20 de julio de 2020 21:52

Todas las respuestas

  • Hola MarZav, 

      

    Gracias por levantar tu consulta en los foros de MSDN. 

    Si lo que pasa es que el hilo principal del programa no se está ocupando de sus tareas normales y ha estado ejecutando codigo por 1 min o sea haciendo un ciclo de mensaje, eso es ilegal cuando usas un servidor COM en un subproceso, las llamadas al metodo no se pueden despachar hasta que el subproceso vuelva a estar inactivo.

    Cualquier cosa que el hilo principal esta haciendo lo deberia de hacer un hilo de trabajo. la clase BackgroundWorker te puede ayudar aqui te dejo este enlace con documentación oficial.

    https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.backgroundworker?view=netcore-3.1

    para saber que hace el hilo principal tienes que irte a Debug + Break All, Debug + Windows + Threads 

    documentacion sobre el problema

    https://docs.microsoft.com/es-es/dotnet/framework/debug-trace-profile/contextswitchdeadlock-mda?redirectedfrom=MSDN

    y este deshabilita el mensaje del deadlock 

    Debug > Exceptions > Managed Debugging Assistants > ContextSwitchDeadlock

     

     Andres Aguilar

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

     

    lunes, 20 de julio de 2020 23:57
    Moderador
  • O sea que aunque estuviese funcionando "bien", esto tarde que temprano iba a suceder?
    martes, 21 de julio de 2020 2:17
  • Hola MarZav

    Correcto esto ya es algo de, en como está programado y bueno lo que produjo fue una detección de un interbloqueo a la hora de hacer la transición del contexto COM

     Andres Aguilar

    ____________________________ 

      


    martes, 21 de julio de 2020 16:44
    Moderador
  • Gracias Andres, modifique la forma en como se insertan esos registros y ahora obtengo otro tipo de error.Si gustan pueden cerrar este hilo de consulta.

    Gracias.

    miércoles, 22 de julio de 2020 2:41
  • Hola MarZav

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado. 

    Si es necesario, por favor abra un nuevo hilo. 

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN. 

     

     Andres Aguilar

    ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    miércoles, 22 de julio de 2020 13:06
    Moderador