应用程序没有捕获VB.NET中的powermode更改

时间:2016-08-05 11:21:04

标签: vb.net

起初我想跟所有用户打招呼。我是.NET编程的新手。我有Microsoft.Win32.PowerModeChangedEventArgs类的问题。我的应用程序应该检测系统是否进入睡眠状态以及系统何时从睡眠状态恢复。

    Sub main()
    If count = 0 Then
        If close = False Then
            firstrun()
        End If
        Dim start As New Thread(AddressOf specials)
        start.Start()
        Dim watch As New Thread(AddressOf watchdog)
        watch.Start()
        If close = True Then
            start.Abort()
            watch.Abort()
        End If
    End If
    Do Until close = True
        Thread.Sleep(20)
        'do something
    Loop
    RemoveHandler Microsoft.Win32.SystemEvents.PowerModeChanged, AddressOf PowerModeChange
    RemoveHandler Microsoft.Win32.SystemEvents.SessionEnding, AddressOf SessionEnding
    Application.Exit()
    End
    End Sub

    Sub PowerModeChange(ByVal sender As System.Object, ByVal e As Microsoft.Win32.PowerModeChangedEventArgs)
        Select Case e.Mode
            Case Microsoft.Win32.PowerModes.Suspend And sus = False
                sus = True
                res = False
                status = "System suspended "
                count = 0
                firstrun()
            Case Microsoft.Win32.PowerModes.StatusChange And res = False
                res = True
                sus = False
                status = "System resumed "
                count = 0
                firstrun()
        End Select
    End Sub

    Sub watchdog()
             AddHandler Microsoft.Win32.SystemEvents.PowerModeChanged, AddressOf PowerModeChange
             AddHandler Microsoft.Win32.SystemEvents.SessionEnding, AddressOf SessionEnding
    End Sub

这是我的代码的一小部分。不幸的是,在Visual Studio 2010中进行调试时,代码工作正常。但是当编译并作为独立的exe运行时,不会检测到电源状态。正如你所看到的,我试图在另一个线程中添加句柄,也尝试循环该线程但没有成功。我的应用程序是在后台运行的一种服务。也许你可以帮助初学者程序员。谢谢你提前。

1 个答案:

答案 0 :(得分:1)

谢谢大家的回复。这个解决方案有助于现在应用程序完美运行。非常感谢你。

<MTAThread()> _
Sub Main()
    'doing something
End Sub