gpt4 book ai didi

c# - 制作启动画面

转载 作者:太空狗 更新时间:2023-10-30 00:12:38 26 4
gpt4 key购买 nike

闪屏的概念并没有让我觉得应该如此复杂,但我无法绘制整个闪屏。

假设我有两个 System.Windows.Forms.Form:RealForm 和 SplashScreen。 RealForm 包含初始 GUI。在 RealForm 的加载过程中(即,在 Load 事件的事件处理程序中),RealForm 创建到数据库的连接,然后测试连接。这可能需要几秒钟,所以在我做所有这些之前,我尝试像这样抛出启动画面:

private void RealForm_Load(object sender, EventArgs e)
{
SplashScreen splash = new SplashScreen();
splash.Show();
loadAndCheckDatabase();
splash.Close();
}

问题是启动画面只被部分绘制,所以它看起来不太像启动画面。知道为什么吗?我该怎么办?

对于奖励积分,有谁知道在哪里可以找到对典型创建、使用和销毁表单中发生的所有系列事件的解释?上面的问题可能是因为我不明白事情发生的顺序或在哪里 Hook 表单事件。


更新接近,但不完全是:寻找更多建议。这是当前代码:

private SplashScreen splash = new SplashScreen();

private void RealForm_Load(object sender, EventArgs e)
{

splash.Show();

BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler
(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
this.Visible = false;

}

void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
splash.Close();
this.Visible = true;
}

void worker_DoWork(object sender, DoWorkEventArgs e)
{
loadAndCheckDatabase();
}

不幸的是,this.Visible = false 没有做任何事情,因为它在我无法控制的代码中自动设置为 true。因此,为了解决这个问题,我将 this.Visible = false 放入表单的 Shown 事件的处理程序中。但是,正如您可能猜到的那样,您仍然可以在一瞬间看到表单……所以这并不是一个很好的解决方案。

有没有办法在我仍在加载处理程序中时等待工作线程?

最佳答案

您在同一个线程上显示初始屏幕并检查您的数据库。线程一次只能做一件事。

解决此问题的一种快速且廉价的方法是让 loadAndCheckDatabase() 定期调用 Application.DoEvents()。然而,这是一个廉价的解决方案。

你真的想在它自己的线程上运行 loadAndCheckDatabase(),一个 BackgroundWorker是一个很好的简单方法来做到这一点。

关于c# - 制作启动画面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3478753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com