C# 在项目启动时显示图像-program.cs?
我有一个小的Windows窗体项目,现在我想在项目启动时显示一个图像,我是说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\
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会很好。