0

首先我有一个表 UserAccounts 列 LoginStatus 如果用户登录用户 loginstatus = 1 否则如果他注销它是 = 0

如果用户不小心关闭计算机或发生电源故障,您认为将处理什么代码。我需要更改 loginstatus = 0 否则如果发生这些事件,它将自动注销。

顺便说一句,我正在使用 sql server

我在表单关闭中使用了此代码,但如果我在应用程序运行时直接从开始菜单关闭计算机,它只会更改登录状态

private void MPTestTablesFormClosing(object sender, FormClosingEventArgs e)
{
    if(e.CloseReason == CloseReason.WindowsShutDown)
    {
       var repo = new UserAccountsRepo();
       var backRepo = new UserLogRepo();

       var logs = new UserLogs
       {
          UserAccount = Globals.UserAccount,
          LogOutTime = DateTime.Now
       };

       Globals.UserAccount.LogStatus = 0;
       repo.Update(Globals.UserAccount);
       backRepo.Update(logs);
       Globals.UserAccount = null;
    }
}
4

2 回答 2

1

一种可能的解决方案是跟踪您的应用程序没有完全关闭的事实。即 ..e 有一个标志保存在永久介质中的某个位置,该标志在您的应用程序启动时设置,并在您的应用程序干净存在时重置。

然后在启动时检查这个标志。如果它仍然设置,您知道您的应用程序没有干净地退出,您可以采取适当的(恢复)步骤以恢复到稳定的未损坏情况。

于 2013-08-24T18:37:54.870 回答
0

在发生电源故障的计算机上运行的应用程序中处理突然的电源故障根本是不可能的。当电源出现故障时,计算机将停止运行,并且应用程序不会收到任何警告。

对于电源模式发生变化的情况,例如计算机被挂起或关闭,您可以使用以下事件SystemEvents

  • SystemEvents.PowerModeChanged
  • SystemEvents.SessionEnding

这两个都可以响应计算机上的特定电源事件而引发。这可能是您正在寻找的

于 2013-08-24T18:26:24.933 回答