ketan Ram Patil Ответов: 2

Как поймать событие закрытия приложения или exe в WPF VB


Привет друг я хочу сохранить время входа пользователя и выхода из системы в базу данных так, как поймать время сеанса выхода пользователя из системы.

там пользователь также может закрыть приложение из Диспетчера задач :(

так что не знаю, как поймать событие закрытия приложения в wpf vb

Что я уже пробовал:

из окна входа в систему я вставляю время входа в систему, но не знаю, как поймать время выхода из системы... ?

Заранее спасибо :)

2 Ответов

Рейтинг:
7

Graeme_Grant

Я знаю, что немного опоздал ... только что вернулся домой.

Как сказал OriginalGriff, вы не можете поймать все обстоятельства, но есть много, что вы можете. Добавьте в свой список следующее Application класс:

Class Application

    Protected Overrides Sub OnStartup(e As StartupEventArgs)

        ' setup global exception handling  
        AddHandler Current.DispatcherUnhandledException,
            New DispatcherUnhandledExceptionEventHandler(AddressOf AppDispatcherUnhandledException)

        AddHandler Dispatcher.UnhandledException,
            New DispatcherUnhandledExceptionEventHandler(AddressOf DispatcherOnUnhandledException)

        AddHandler AppDomain.CurrentDomain.UnhandledException, _
                   AddressOf CurrentDomainOnUnhandledException

        ' start the app
        MyBase.OnStartup(e)

    End Sub

    Private Sub AppDispatcherUnhandledException(sender As Object, _
                                                e As DispatcherUnhandledExceptionEventArgs)
        ForwardUnhandledException(e)
    End Sub

    Private Sub DispatcherOnUnhandledException(sender As Object, _
                                               e As DispatcherUnhandledExceptionEventArgs)
        ForwardUnhandledException(e)
    End Sub

    Private Sub ForwardUnhandledException(e As DispatcherUnhandledExceptionEventArgs)
        ' forward the exception to AppDomain.CurrentDomain.UnhandledException ...
        Current.Dispatcher.Invoke(DispatcherPriority.Normal,
            New Action(Of Exception)(Sub(exc)
                                         Throw New Exception("Exception from another Thread", exc)
                                     End Sub), e.Exception)
    End Sub

    Private Sub CurrentDomainOnUnhandledException(sender As Object, _
                                                  e As UnhandledExceptionEventArgs)
        ' Do logging of exception details

        ' Let the user know that something serious happened...
        Dim ex = TryCast(e.ExceptionObject, Exception)
        MessageBox.Show(ex.Message,
                        ex.TargetSite.ToString(),
                        MessageBoxButton.OK,
                        MessageBoxImage.[Error])

        ' ask the app to shut down...
        Current.Shutdown()
    End Sub

    Protected Overrides Sub OnExit(e As ExitEventArgs)
        ' last change for cleanup code here!

        ' clear to exit app
        MyBase.OnExit(e)

    End Sub

End Class


Maciej Los

Поздно, но не лениво ;)
5ed!

Graeme_Grant

Спасибо! :) Ловит как чистые, так и грязные выходы...

Рейтинг:
15

OriginalGriff

Вы не можете поймать каждый выход: если пользователь отключает питание, например, вы ничего не можете сделать - и принудительное закрытие процесса из Диспетчера задач имеет тот же эффект.

Поэтому сделайте две вещи: обработайте основное событие закрытия формы и будьте готовы найти "разумное значение по умолчанию", когда пользователь не вышел из системы.


ketan Ram Patil

спасибо за ваш ценный повтор have a gr8 day.. :)

OriginalGriff

Всегда пожалуйста!