我正在编写一个应用程序,它从实时引擎中获取数据并对其进行处理。此数据每5秒更新一次。
现在我想要一个启动画面,显示第一个数据获取循环的进度条。第一次获取数据后,应用程序将打开显示所获取数据的主窗体。从此处,主表单每5秒在循环中获取数据。
我已将用于打开主窗体的代码放在BackgroundWorker的ProgressChanged事件中。
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = Math.Min(e.ProgressPercentage, 100);
if (progressBar1.Value == 100)
{
SplashScr.ActiveForm.Hide();
frmMainForm frmMain= new frmMainForm();
frmMain.WindowState = FormWindowState.Maximized;
frmMain.Show();
}
}
主表单加载后是否有任何关闭Splashscreen的方法或者这个实现是否正确?
答案 0 :(得分:4)
我将假设在你的Program.Main
中你有以下几点:
Application.Run(new SplashForm());
如果是这样,那么关闭启动表单时应用程序关闭的原因就在于此。尝试这样的事情:
Application.Run(new MainForm());
然后从主窗体中显示您的初始形式并从此处理它。
HTH
答案 1 :(得分:0)
两种可能性。
我认为你的启动画面是你的“主要形式”,这是你的应用程序创建的第一个。默认情况下,这将在您关闭它时终止您的应用程序。
因此,要么使您的启动画面成为可以随意打开和关闭的不同形式,保持主窗体为GUI打开,或者您需要更改关闭方法的默认操作 - 通常这将是'最小化',但这与你的例子中的最小化具有相同的效果。
答案 2 :(得分:0)
在我看来,我宁愿在主窗体中包含启动画面。应在init / load方法期间显示启动屏幕 主窗体的加载,当加载所需的数据%时,可以关闭它。所以backgroundworker应该由主表单本身创建。
因此后台工作者的进度改变方法只会关闭启动画面。这很好,因为主线程包含句柄