Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未连接的用户如果发生电源故障/拔下计算机,如何处理电源故障_C#_Sql Server 2008 R2 - Fatal编程技术网

C# 未连接的用户如果发生电源故障/拔下计算机,如何处理电源故障

C# 未连接的用户如果发生电源故障/拔下计算机,如何处理电源故障,c#,sql-server-2008-r2,C#,Sql Server 2008 R2,首先,我有一个带有LoginStatus列的UserAccounts表 如果用户登录,则用户登录状态=1;如果用户注销,则用户登录状态=0 如果用户意外地将计算机插头拔下或发生电源故障,您认为会处理哪些代码。我需要更改loginstatus=0,否则如果发生这些事件,它将自动注销 顺便说一下,我正在使用sql server 我在表单关闭中使用了此代码,但只有在应用程序运行时直接从“开始”菜单关闭计算机时,它才会更改登录状态 private void MPTestTablesFormClosing

首先,我有一个带有LoginStatus列的UserAccounts表 如果用户登录,则用户登录状态=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;
    }
}

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

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

  • SystemEvents.PowerModeChanged
  • SystemEvents.SessionEnding

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

一个可能的解决方案是跟踪应用程序未干净关闭的事实。也就是说,有一个标志保存在持久性介质的某个地方,在应用程序启动时设置,当应用程序干净存在时重置

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