Ich versuche, eine plattformübergreifende C# .NET-Anwendung mit C#, Mono/GTK # auf Linux und .NET/GTK # auf Windows zu machen, aber die Startreihenfolge unter den beiden Plattformen etwas anders sein zu müssen scheint:Crossplatform Threading und GTK #, funktioniert nicht (richtig)?
unter Linux:
public static void Main (string[] args)
{
Gdk.Threads.Init();
// etc...
unter Windows:
public static void Main (string[] args)
{
Glib.Thread.Init();
Gdk.Threads.Init();
// etc...
Beide erfordern es, dass die Art und Weise getan werden: Windows über g_thread_init beschwert() nicht mit dem Linux-Code genannt wird, und Linux klagt darüber bereits sein namens mit dem Windows-Code. Ansonsten funktioniert alles wunderbar.
Mein erster Versuch einer „Lösung“ sah aus wie:
public static void Main (string[] args)
{
try {
Gdk.Threads.Init();
} catch (Exception) {
GLib.Thread.Init();
Gdk.Threads.Init();
}
// etc...
Aber auch diese unordentlich Lösung funktioniert nicht; Der Fehler kommt von GTK +, nicht verwaltetem Code, daher kann er nicht abgefangen werden. Hat jemand gute Ideen über die Ursache des Problems und wie kann man es beheben? Oder, wenn das nicht klappt, haben Sie gute Ideen, wie Sie erkennen können, welche zur Laufzeit aufgerufen werden sollten?
Johan hat Recht - Sie müssen GDK-Funktionen nicht wirklich aus mehreren Threads aufrufen, und es ist eine schlechte Idee, dies trotzdem zu tun (Winforms und WPF lassen Sie das gar nicht erst tun) –
Vielen Dank für die extra Meile und Suche nach den GTK # ruft :) –
Woho! Danke für die 300 Punkte! –