此刻我得到了这个
更新:感谢所有答案。
private void Form1_Load(object sender, EventArgs e)
{
//hide() doesnt help
Thread init = new Thread(InitApplication);
init.IsBackground = true;
init.Start();
}
InitApplication至少需要5秒以上才能完成并写入所有设置。我希望我的splashScreen在此之前保持不变。
增加:
private readonly SplashScreen _splash;
public Form1(SplashScreen splashy)
{
_splash = splashy;
InitializeComponent();
}
我得到了
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
SplashScreen splashy = new SplashScreen();
splashy.Show();
Application.DoEvents();
Application.Run(new Form1(splashy));
}
它正在做它想要做的事情,但是,现在我在splashform上看到form1。我在哪里可以添加hide和show方法,这样只有完全加载时才显示启动画面和form1弹出窗口。
答案 0 :(得分:1)
尝试从UI线程加载启动画面,然后使用后台工作程序执行InitApplication()
。后台工作程序可以将进度传达给UI线程。
BackgroundWorker Class on MSDN
BackgroundWorker类允许您在单独的专用线程上运行操作。下载和数据库事务等耗时的操作可能会导致用户界面(UI)在运行时停止响应。当您需要响应式UI并且您遇到与此类操作相关的长时间延迟时,BackgroundWorker类提供了一种方便的解决方案。
答案 1 :(得分:1)
您可以使用Async Await,后台工作程序或线程来初始化您的应用程序等。这些是按照易于使用的顺序编写的,并遵循一般模式。
使用普通的Windows窗体,然后使用进度条,gif图像等。在表单加载或表单显示事件启动后台任务,完成后,关闭正常表单并加载主申请表。
如果您的InitApplication有任何涉及GUI的调用,您将不得不更改该调用并在GUI线程上调用所需的操作。