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

C# 在项目启动时显示图像-program.cs?,c#,winforms,C#,Winforms,我有一个小的Windows窗体项目,现在我想在项目启动时显示一个图像,我是说Program.cs 可能吗 static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Image MyPrgImage = Image.FromFile("C:\\Temp\

我有一个小的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());
        }

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

您指的是启动屏幕,对吗?
考虑向微软.VisualBasic添加引用(如果尚未完成),然后设置属性。

还有几点:

  • Windows窗体不支持简单直接的启动屏幕。
    即使是上面的解决方案也需要几秒钟才能加载.net framework以显示初始屏幕
  • 有关更多示例和重要备注,请参见此
  • 有关自定义解决方案,请参见此

    • 当然。。。将新的
      WindowsForm
      添加到项目中,称之为
      SplashImageForm
      。将
      PictureBox
      控件添加到其中,并将所需的图像添加到其中。调整表单大小,设置以下属性:

      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秒钟,并且允许主线程在
      应用程序上阻塞。按预期运行(f)
      ,直到
      SplashImageForm
      未关闭。因此,图像由主线程加载,GUI响应良好

      当超时结束时,将调用
      Invoke()
      方法,以便作为窗体所有者的主线程将其关闭。如果不在这里,将抛出跨线程异常

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

      只需添加一个windows窗体(窗体名称为imgsplash)&来自以下选项集:-

      FormBorderStyle-无
      ShowInTaskBar-错误
      开始位置-中心屏幕
      在此表单中,设置背景图像[要在应用程序启动时显示的图像]

      --现在在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());
          }
      

      你是说像启动屏幕?你想创建一个启动屏幕。看看这个:@IAbstract你能解释一下为什么不能吗?我同意这看起来很奇怪,但您也添加了对其他DLL的引用,只是为了使用它们的功能。VisualBasic.dll由MS维护,是.net framework不可分割的一部分,因此我看不出有任何问题。请参阅@Cipi的答案…这不使用参考。我不一定同意他用来关闭表单的过程,但这并没有错。@IAbstract:在我的代码中,表单关闭有什么问题?它是线程安全的,并且会关闭表单…:)@我想看看你的想法。。。把它作为评论贴在这里,我会把它添加到我的答案中,并提及你但问题是picturebox显示没有问题。但是图像没有用picturebox显示…但问题是picturebox显示没有问题。但图像未显示在picturebox中…请立即尝试。再次检查代码,我对其进行了编辑,以添加将被阻止的新线程,而不是主线程被阻止的旧代码。@Cipi:我所指的纯粹是个人偏好…例如,我不会将启动屏幕固定为2秒,而是会有另一个事件,如
      Form1.HandleCreated
      ,这将关闭启动屏幕。就像我说的,你无论如何都没有错(I+1你的答案)…结束只是个人偏好。嘿,Cipi,这看起来是一个很好的例子(+1),但只有在启动屏幕关闭后才会创建Form1。因此,如果Form1的创建需要花费大量时间,那么仍有一段时间屏幕上不会显示任何内容。关闭SplashImageForm后直接显示Form1会很好。