У меня сложилось впечатление, что STAThread влияет только на COM, поэтому в данном случае это ничего не значит.

аюсь создать кроссплатформенное приложение на C # с использованием C #, mono / GTK # в Linux и .NET / GTK # в Windows, однако последовательность запуска должна немного отличаться на двух платформах:

Под Linux:

public static void Main (string[] args)
{
    Gdk.Threads.Init ();
    // etc...

Под виндой:

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 +, неуправляемого кода, поэтому она не может быть перехвачена. У кого-нибудь есть какие-нибудь яркие идеи по поводу причины проблемы и как ее исправить? Или, в случае неудачи, есть яркие идеи о том, как определить, какой из них следует вызывать во время выполнения?

Ответы на вопрос(4)

Ваш ответ на вопрос