Если вы ищете самый простой способ, вы можете использовать превосходную встроенную поддержку .NET Framework для заставок. Вам придется отложить в сторону любые иррациональные страхи, которые могут возникнуть у вас.включая что-то с именем «Visual Basic» в приложение C #, но этот способ избавит вас от необходимости развертывать собственное решение и беспокоиться о таких вещах, как многопоточность, вызов и все такое.В конце концов, все это сводится к одному и тому же IL.Вот как это работает:
Добавьте ссылку на Microsoft.VisualBasic
в ваш проект.
Добавьте новую форму (названную как-то вроде SplashForm
) в качестве заставки.
Чтобы сделать ее более похожей на заставку, установите для свойства FormBorderStyle
формы значение "Нет" иего StartPosition
свойство для "CenterScreen".В эту форму можно добавить любые элементы управления или изображения, которые вы хотите отобразить на заставке.
Добавьте следующий код в файл Project.cs
:
using System;
using System.Windows.Forms;
using Microsoft.VisualBasic.ApplicationServices;
namespace WindowsFormsApplication1
{
static class Program
{
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
new SplashScreenApp().Run(args);
}
}
public class SplashScreenApp : WindowsFormsApplicationBase
{
protected override void OnCreateSplashScreen()
{
this.SplashScreen = new SplashForm();
this.SplashScreen.ShowInTaskbar = false;
this.SplashScreen.Cursor = Cursors.AppStarting;
}
protected override void OnCreateMainForm()
{
//Perform any tasks you want before your application starts
//FOR TESTING PURPOSES ONLY (remove once you've added your code)
System.Threading.Thread.Sleep(2000);
//Set the main form to a new instance of your form
//(this will automatically close the splash screen)
this.MainForm = new Form1();
}
}
}
Если вы хотите сделать что-то необычное, например создать прозрачный экран-заставку в стиле Adobe Photoshop, вы можете добавить PNG-изображение альфа-каналав файл ресурсов вашего проекта, а затем добавьте следующий код в форму заставки, заменив splashImage
на путь к встроенному ресурсу изображения:
protected override void OnPaintBackground(PaintEventArgs pevent)
{
Graphics g = pevent.Graphics;
g.DrawImage(splashImage, new Rectangle(0, 0, this.Width, this.Height));
}
protected override void OnPaint(PaintEventArgs e)
{
//Do nothing here
}
Чтобы это работало, убедитесь, что у вас естьдвойная буферизация выключена выключена , иначе вы получите черный фон для вашей формы.Во всяком случае, нет никакой причины дважды буферизовать заставку.