我有一个.Net Winform应用程序,需要一些时间来加载。
我想创建一个启动画面,它会在我点击我的应用程序时启动,并在我的应用程序打开时关闭。基本上通过启动画面我想监视我的应用程序的初始化过程
Splash Screen应该是一个不同的winform,应该在单独的Thread中运行。
我想要一个名为“停止等待”的按钮。在Splash屏幕中,用户可以点击它来取消打开应用程序,我应该可以关闭应用程序。
同样在Splash屏幕中,我需要显示应用程序初始化的进度。
我对Splash Screen的了解非常有限。您能否举几个例子继续我的要求?
实施启动画面后的另一个问题: 我的应用程序初始化发生在不同的项目中,所以我为Splash Screen创建了一个单独的exe并在主屏幕的不同项目中使用它。在主屏幕中添加启动画面(exe)作为参考并使用Splash Screen中的方法是一个好习惯吗?
先谢谢你的帮助。
答案 0 :(得分:2)
这是很多问题,我将回答"如何制作启动画面"然后你可以进一步尝试取消并显示初始化进度。
您基本上创建了另一个充当Splash表单的表单。
设置属性:
然后在Main中显示主窗口之前创建初始屏幕,显示它并传递对主窗口对象的引用
Splash splash = new Splash();
splash.Show();
MainWindow wnd = new MainWindow(splash);
在主窗口的MainWindowLoad_Load函数中:
public MainWindow(Splash splash)
{
mSplash = splash;
}
private void MainWindow_Load(object sender, System.EventArgs e)
{
// do long initialisation, and when done....
mSplash.Close();
mSplash = null;
}
答案 1 :(得分:0)
因为启动画面与外观有关,我建议您让UI
线程处理它,并将您的代码带入另一个执行线程,否则在启动屏幕的显示中需要更改任何内容BeginInvoke
。因此
这是我的方式:
private void MainForm_Load(object sender, EventArgs e)
{
LoadingForm _loading = new LoadingForm();
BackgroundWorker _worker = new BackgroundWorker { WorkerReportsProgress = true };
_worker.ProgressChanged += (o, z) =>
{
_loading.progressBar1.Minimum = 0;
_loading.progressBar1.Maximum = 100;
_loading.progressBar1.Value = (z as ProgressChangedEventArgs).ProgressPercentage;
};
_worker.RunWorkerCompleted += (fWorker, fargs) =>
{
_loading.Dispose();// this is executed when all the code in dowork event is completed,disposing the loading form and continuing your code
};
_worker.DoWork += (workerO, workerArgs) =>
{
// execute your code here , update progressbar as you go:
int yourProgress = 0;//need to generate this in your code as percentage 0-100
_worker.ReportProgress(yourProgress);
//////////////////////////just to show progress change//////////////////////////////
for (int i = 0; i < 5; i++)
{
Thread.Sleep(1500);
yourProgress += 20;
_worker.ReportProgress(yourProgress);
}
Thread.Sleep(3000);
////////////////////////////////////////////////////////////////////////////////
};
_worker.RunWorkerAsync();
_loading.ShowDialog(this);
}
请注意,您需要公开ProgressBar Control的修饰符,以便让后台工作人员更改其百分比。