VB.NET :Splash类与只许一个实例

需要书写一个程序的启动屏,在启动此屏时加载后台的代码,然后再显示它。如果自己写这个多线程的当然也行,问题是相当麻烦。于是在网上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屏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值