从不同的线程关闭启动画面?

时间:2011-09-19 13:37:16

标签: c# .net winforms multithreading

我正在使用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 个答案:

答案 0 :(得分:3)

如果您的初始屏幕表单名为mySplashScreen

mySplashScreen.Invoke(new MethodInvoker(delegate {
    mySplashScreen.Close();
    mySplashScreen.Dispose();
}));

答案 1 :(得分:2)

您无法从创建它们的线程以外的线程访问用户界面元素。通常可以使用Control.Invoke来访问其他线程的UI元素。