我正在使用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.
这是否可能?
答案 0 :(得分:3)
如果您的初始屏幕表单名为mySplashScreen
:
mySplashScreen.Invoke(new MethodInvoker(delegate {
mySplashScreen.Close();
mySplashScreen.Dispose();
}));
答案 1 :(得分:2)
您无法从创建它们的线程以外的线程访问用户界面元素。通常可以使用Control.Invoke来访问其他线程的UI元素。