estoy tratando de hacer una aplicación multiplataforma C# usando C#, mono/GTK # en Linux y .NET/GTK # en Windows, sin embargo, la secuencia de arranque parece que tenga que ser un poco diferente bajo las dos plataformas:Crossplatform threading y GTK #, no funciona (correctamente)?
en Linux:
public static void Main (string[] args)
{
Gdk.Threads.Init();
// etc...
en Windows:
public static void Main (string[] args)
{
Glib.Thread.Init();
Gdk.Threads.Init();
// etc...
Ambos requieren que se haga de esa manera: Windows se queja de g_thread_init() no ser llamado con el código de Linux y Linux se queja de que ya se están llamado con el código de Windows. Aparte de esto, todo funciona maravillosamente.
Mi primer intento de una "solución" se parecía a:
public static void Main (string[] args)
{
try {
Gdk.Threads.Init();
} catch (Exception) {
GLib.Thread.Init();
Gdk.Threads.Init();
}
// etc...
Pero incluso esta solución no funciona desordenado; el error proviene de GTK +, código no administrado, por lo que no se puede capturar. ¿Alguien tiene ideas brillantes sobre la causa del problema y cómo solucionarlo? O, en su defecto, tener ideas brillantes sobre cómo detectar cuál debería llamarse en tiempo de ejecución.
Tiene derecho a Johan: realmente no necesita llamar a las funciones de GDK desde varios hilos, y es una mala idea hacerlo de todos modos (Winforms y WPF ni siquiera le permiten hacerlo) –
Gracias por hacer un esfuerzo adicional y buscando las # llamadas GTK :) –
Woho! Gracias por los 300 puntos! –