Я пытаюсь создать кроссплатформенное приложение на C #, используя C #, mono / GTK # в Linux и .NET / GTK # в Windows, однако последовательность запуска должна немного отличаться для двух платформ:
Под Linux:
public static void Main (string[] args)
{
Gdk.Threads.Init ();
// etc...
Под Windows:
public static void Main (string[] args)
{
Glib.Thread.Init ();
Gdk.Threads.Init ();
// etc...
Оба требуют, чтобы это делалось таким образом: Windows жалуется на то, что g_thread_init () не вызывается с кодом Linux, а Linux жалуется на то, что он уже вызывается с кодом Windows. Кроме этого, все это прекрасно работает.
Моя первая попытка «решения» выглядела так:
public static void Main (string[] args)
{
try {
Gdk.Threads.Init ();
} catch (Exception) {
GLib.Thread.Init ();
Gdk.Threads.Init ();
}
// etc...
Но даже это грязное решение не работает; ошибка исходит от GTK +, неуправляемого кода, поэтому она не может быть перехвачена. У кого-нибудь есть какие-нибудь яркие идеи по поводу причины проблемы и как ее исправить? Или, если это не удастся, есть яркие идеи о том, как определить, какой из них следует вызывать во время выполнения?