2010-03-30 7 views
14

Tengo un hilo de trabajo generado a partir de una GUI (para el rendimiento de la GUI), ¿cómo accedo a la GUI, como generar nuevas ventanas/widgets desde el hilo mismo?¿Cómo accedo a la GUI (GTK) desde varios subprocesos?

Intenté usar delegados pero parece que no funciona. ¿Algunas ideas? Posiblemente ejemplos? Gracias.

+0

¡Los delegados no funcionan !? ¿Utiliza el método Control.BeginInvoke() para invocar delegados? – Cipi

+0

No lo hice, ¿pueden dar más detalles sobre eso? – nubela

+5

Tenga en cuenta que está utilizando GTK, no Windows Forms, por lo que la API es diferente (ver a continuación). –

Respuesta

31

Según su Best Practices:

Gtk # no es un conjunto de herramientas thread-safe, lo que significa que sólo un hilo a la vez puede invocar de forma segura métodos en Gtk #. Este subproceso es típicamente el subproceso que ejecuta el bucle principal (que es cuando el control ha sido transferido explícitamente a Gtk).

Cuando los desarrolladores de aplicaciones necesitan que los subprocesos actualicen algún elemento de la interfaz gráfica de usuario, deben adquirir un bloqueo que les permita emitir invocaciones Gtk # toolkit o hacer que el código se ejecute en el mismo hilo que el hilo que ejecuta el ciclo principal.

Para invocar un método en la secuencia de bucle principal de GTK + y evitar cualquier problema de subprocesamiento con GTK, puede utilizar el método Gtk.Application.Invoke() (si se dirige a Gtk # 1.0 puede usar Gtk.ThreadNotify).

Se proporciona el siguiente ejemplo; debe usar Invoke para ejecutar cualquier código Gtk desde el bucle principal:

public void ThreadedMethod() 
{ 
    Gtk.Application.Invoke(delegate { 
     do_stuff_in_main_thread(); 
    }); 
} 
+0

¡Funciona! Puedo aceptar las ans en 1 minuto, dame ese mínimo;) ¡También, votado! – nubela

+0

Gracias, me alegro de que te haya ayudado :) –

+0

¿Cómo hacer lo mismo en gtkmm? – fnc12

Cuestiones relacionadas