在项目启动时显示图像 - program.cs?

时间:2011-09-26 11:55:27

标签: c# winforms

我有一个小的Windows窗体项目,现在我希望在项目启动时显示图像,我的意思是Program.cs

有可能吗?

static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Image MyPrgImage = Image.FromFile("C:\\Temp\\Images\\For_Network.gif");
            ??????

            Application.Run(new Form1());
        }

4 个答案:

答案 0 :(得分:6)

当然......将新的WindowsForm添加到您的项目中,将其命名为SplashImageForm。添加PictureBox控件,然后在其中添加所需的图像。调整表单大小,设置这些SplashImageForm属性:

FormBorderStyle - None
ShowInTaskBar - false
StartPosition - CenterScreen

然后你想在Form1之前显示该表单并在超时到期后关闭它...例如:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    SplashImageForm f = new SplashImageForm();

    f.Shown += new EventHandler((o,e)=>{
        System.Threading.Thread t = new System.Threading.Thread(() =>
            {
                System.Threading.Thread.Sleep(2000);
                f.Invoke(new Action(() => { f.Close(); }));

            });
            t.IsBackground = true;
            t.Start();
    });

    Application.Run(f);
    Application.Run(new Form1());
}

修改 现在,有一个新线程在System.Threading.Thread.Sleep(2000)上阻塞了2秒,主线程被允许在Application.Run(f)上阻塞,直到SplashImageForm没有关闭。因此,图像由主线程加载,GUI响应。

当超时结束时,调用Invoke()方法,因此作为表单所有者的主线程将关闭它。如果不在这里,将抛出交叉线程异常。

现在图像显示2秒,然后显示Form1。

答案 1 :(得分:2)

你的意思是一个闪屏,对吧? 考虑添加对Microsoft.VisualBasic的引用(如果尚未完成),然后设置WindowsFormsApplicationBase.SplashScreen属性。

还有几点:

  • Windows窗体不支持简单直接的启动画面 即使上面的解决方案也需要几秒钟,直到加载.net框架才能显示启动画面。
  • 有关更多示例和重要说明,请参阅此question here
  • 有关自定义解决方案,请参阅此CodeProject.com sample

答案 2 :(得分:1)

您需要一个简单的表单(可能带有PictureBox)来加载和显示图像。然后在加载主表单后将其删除。

答案 3 :(得分:0)

只需添加一个窗口表单(让表单的名称为imgsplash)&来自以下选项: -

FormBorderStyle - 无
ShowInTaskBar - 假
StartPosition - CenterScreen

在此表单中设置背景图像[您想在应用程序启动时显示的图像]

- 现在在program.cs中添加以下步骤: -

       static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        imgsplash f = new imgsplash();
        f.Show();
        System.Threading.Thread.Sleep(2000);
        f.Close();
        Application.Run(new Form1());
    }