Tengo una aplicación GUI que se conecta a un sensor, reúne datos y los procesa en segundo plano usando BackgroundWorker
hilos.Cómo depurar y resolver un bloqueo de 'DisconnectedContext'?
Tal como está, estoy publicando datos en la GUI usando el ProgressChanged
que parecía estar funcionando bien para empezar. Desde entonces, he aumentado las tasas de datos y he descubierto un problema; si el software se deja funcionar durante unos minutos, la cantidad de uso del procesador parece aumentar hasta alcanzar casi el 100% en ambos núcleos en mi máquina y en ese momento, aparece un error que dice:
El Asistente de depuración administrado 'DisconnectedContext' detectó un problema en 'myapp.exe'. Información adicional: el contexto 0xe2ba0 está desconectado. Liberando las interfaces del contexto actual (contexto 0xe2d10). Esto puede causar corrupción o pérdida de datos.
He leído algunas cosas en la web que sugieren que esto puede suceder si una aplicación GUI no puede bombear mensajes lo suficientemente rápido. Me he dado cuenta de que puedo provocar que el mismo choque ocurra más rápido si cambio el tamaño de la ventana rápidamente (es decir, bombeo una carga de más mensajes) lo cual respalda la teoría que creo.
Así que las preguntas aquí son:
- si alguien está de acuerdo con mi hipótesis sobre el mensaje de bombeo?
- Si hay otra explicación?
- ¿Hay alguna manera de que pueda probarlo (vea el número de mensajes en la cola quizás)?
- ¿Estos son todos malos olores de código que sugieren que estoy haciendo esto de la manera incorrecta?
Cualquier consejo sería muy bien recibido.
Probé la configuración MTATHread que solo parecía agregar un bloqueo ocasional. En su lugar, adopté un mecanismo queue y formé un error en una parte del código de la pantalla que estaba sobre-rellenando un 'RichTextBoxControl'. Entre esos dos, parece que he resuelto el problema. Gracias por las sugerencias. –
He visto esto suceder unas cuantas veces más y definitivamente se desencadena al intentar enviar demasiadas solicitudes 'ProgressChanged' desde el hilo del productor de datos a sus oyentes. –