Закрытие заставки из другого потока? - PullRequest
3 голосов
/ 19 сентября 2011

Я использую WindowsFormsApplicationBase , чтобы показать заставку. Теперь, когда создается основная форма и возникают ошибки, должно быть показано окно сообщения, информирующее пользователя. Тем не менее, окно сообщения отображается под заставкой, поэтому оно не видно. Мне нужно закрыть заставку, чтобы я мог взаимодействовать с пользователем.

Следующий код выдаст исключение операции с несколькими потоками:

class SingleInstanceApplication : WindowsFormsApplicationBase
{
    private static SingleInstanceApplication instance;

    public static void CloseSplash()
    {
        if (instance.SplashScreen != null)
            instance.SplashScreen.Close();
    }
}

Ошибка:

Cross-thread operation not valid: Control 'Splash' accessed from a thread 
other than the thread it was created on.

Это вообще возможно ??

Ответы [ 2 ]

3 голосов
/ 19 сентября 2011

Если ваша форма заставки называется mySplashScreen:

mySplashScreen.Invoke(new MethodInvoker(delegate {
    mySplashScreen.Close();
    mySplashScreen.Dispose();
}));
2 голосов
/ 19 сентября 2011

Вы не можете получить доступ к элементам пользовательского интерфейса из потока, отличного от того, который их создал.Обычно можно использовать Control.Invoke для доступа к элементам пользовательского интерфейса из других потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...