Sto cercando di creare un'applicazione C# multipiattaforma usando C#, mono/GTK # su Linux e .NET/GTK # su Windows, tuttavia la sequenza di avvio sembra essere leggermente diversa sotto le due piattaforme:Threading multipiattaforma e GTK #, non funziona (correttamente)?
sotto Linux:
public static void Main (string[] args)
{
Gdk.Threads.Init();
// etc...
In Windows:
public static void Main (string[] args)
{
Glib.Thread.Init();
Gdk.Threads.Init();
// etc...
Entrambi richiedono che sia fatto in questo modo: Windows lamenta g_thread_init() non essere chiamato con il codice di Linux, e Linux lamenta già essere chiamato con il codice di Windows. Oltre a questo, funziona tutto meravigliosamente.
Il mio primo tentativo di una "soluzione" sembrava:
public static void Main (string[] args)
{
try {
Gdk.Threads.Init();
} catch (Exception) {
GLib.Thread.Init();
Gdk.Threads.Init();
}
// etc...
Ma anche questa soluzione disordinata non funziona; l'errore proviene da GTK +, codice non gestito, quindi non può essere catturato. Qualcuno ha idee brillanti sulla causa del problema e su come risolverlo? Oppure, in mancanza di ciò, hanno idee brillanti su come individuare quale debba essere chiamato in fase di runtime?
Johan ha ragione: non hai davvero bisogno di chiamare le funzioni GDK da più thread, ed è una cattiva idea farlo comunque (Winforms e WPF non ti permettono nemmeno di farlo affatto) –
Grazie per aver fatto il miglio supplementare e cercare le chiamate GTK # :) –
Woho! Grazie per i 300 punti! –