需要书写一个程序的启动屏,在启动此屏时加载后台的代码,然后再显示它。如果自己写这个多线程的当然也行,问题是相当麻烦。于是在网上searching,结果在:
http://lzmtw.cnblogs.com/archive/2005/11/08/271403.html
处找到了代码.
不过,我同样在另一个网页找到了其中需要修改的一处:
Private Sub HideSplashScreen()
Dim SplashScreenFormDisposeDelegate As DisposeDelegate = New DisposeDelegate(AddressOf Me._SplashScreenForm.Dispose)
Me._SplashScreenForm.Invoke(SplashScreenFormDisposeDelegate)
Me._SplashScreenForm = Nothing
Me.MainForm.WindowState = _MainFormWindowState
Me.MainForm.Activate()
End Sub
改成了
Private Sub HideSplashScreen()
Me.MainForm.WindowState = _MainFormWindowState
Me.MainForm.Activate()
Dim SplashScreenFormDisposeDelegate As DisposeDelegate = New DisposeDelegate(AddressOf Me._SplashScreenForm.Dispose)
Me._SplashScreenForm.Invoke(SplashScreenFormDisposeDelegate)
Me._SplashScreenForm = Nothing
End Sub
保证程序为当前活动程序
用了用,非常的顺手。于是就不用写了,然后这是我的主app代码:
Imports System.Threading
Public Class App
Public Shared Sub Main()
Dim mt As Mutex = New Mutex(True, "TMS-Program-ForYaheng-Menu-200603")
If (mt.WaitOne(0, False)) Then
Dim t As New MyContext
Application.Run(t)
Else
MessageBox.Show("您的程序已经在运行了,不能运行两个实例!")
End If
End Sub
End Class
Public Class MyContext
Inherits SplashScreenApplicationContextClass
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = New Form1
End Sub
Protected Overrides Sub OnCreateSplashScreenForm()
Me.SplashScreenForm = New frmSplash
End Sub
Protected Overrides Sub SetSeconds()
Me.SecondsShow = 3 '显示3秒,若是0则取默认值5秒
End Sub
End Class
这个代码加入了互斥信号。于是程序只会运行一次!
特定说明:
这个splash程序在2003上是很正常的。因为在项目属性中可以设定project的启动为app类。不过在2005中,一切就变得困难了,因为win form只能设定为form启动项,除非改为服务程序。真是头大,看来对我这样的新手,2005下只能老老实实的用它提供的splash屏