Pregunta

Tengo un extraño error, por favor, hágamelo saber si usted tiene alguna pista acerca de la razón.

Tengo un Timer (System.Windows.Forms.Timer) en mi formulario principal, que despide a algunos cambios, que también se actualizan con el tiempo la forma principal de la interfaz de usuario. Entonces tengo un editor, que se abre desde el formulario principal utilizando el método ShowDialog(). En este editor Tengo un PropertyGrid (System.Windows.Forms.PropertyGrid).

Soy incapaz de reproducirlo cada vez, pero bastante a menudo, cuando se utiliza menús desplegables en esa cuadrícula de propiedades en el editor se queda atascado, es decir OK / Cancelar botones no cerrar el formulario, red de propiedad no se convierte en utilizable botón Cerrar en forma de cabecera no funciona.

No hay excepciones en el fondo, y si rompo el proceso veo que la aplicación está haciendo algunos cálculos relacionados con las actualizaciones que he mencionado al principio.

¿Qué me recomiendan? Cualquier ideas son bienvenidas.

¿Fue útil?

Solución

Lo que pasa es que el método Tick del temporizador hilo no se ejecuta en un hilo diferente, por lo que es todo lo demás de bloqueo hasta que se hace. Hice una aplicación de Windows Forms de prueba que tenía un temporizador y 2 botones de la misma cuyas eventos hizo esto:

private void timer1_Tick(object sender, EventArgs e)
{
    Thread.Sleep(6000);
}

private void button1_Click(object sender, EventArgs e)
{
    timer1.Start();
}

private void button2_Click(object sender, EventArgs e)
{
    frmShow show = new frmShow();
    show.ShowDialog(); // frmShow just has some controls on it to fiddle with
}

y de hecho bloqueado como usted describió. A continuación lo resolvió:

private void timer1_Tick(object sender, EventArgs e)
{
    ThreadPool.QueueUserWorkItem(DoStuff);
}

private void DoStuff(object something)
{
    Thread.Sleep(6000);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top