0

最初に、ユーザーがログインしている場合は列 LoginStatus を持つテーブル UserAccounts を持っています loginstatus = 1 それ以外の場合はログアウトした場合 = 0

ユーザーが誤ってコンピューターのプラグを抜いたり、電源障害が発生した場合に、どのコードが処理されると思いますか? loginstatus = 0 を変更する必要があります。そうしないと、これらのイベントが発生した場合に自動ログアウトされます。

ちなみに私はSQLサーバーを使用しています

フォームを閉じるときにこのコードを使用しましたが、アプリケーションの実行中にスタートメニューからコンピューターを直接シャットダウンした場合にのみ、ログインステータスが変更されます

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

考えられる解決策の 1 つは、アプリケーションが正常に閉じられなかったという事実を追跡することです。つまり、アプリケーションの起動時に設定され、アプリケーションが正常に存在するときにリセットされる永続的なメディアのどこかにフラグが保存されています。

次に、起動時にこのフラグを確認します。それでも設定されている場合は、アプリケーションが正常に終了していないことがわかり、適切な (回復) 手順を実行して、破損していない安定した状態に戻すことができます。

于 2013-08-24T18:37:54.870 に答える
0

電源障害のあるコンピューターで実行されているアプリケーションで突然の電源障害を処理することは、まったく不可能です。電源に障害が発生すると、コンピュータは実行を停止し、アプリケーションは警告を受け取りません。

コンピュータがサスペンドまたはシャットダウンされている場合など、電源モードが変更された場合は、次のイベントを使用できます。SystemEvents

  • SystemEvents.PowerModeChanged
  • SystemEvents.SessionEnding

これらは両方とも、コンピューターの特定の電源イベントに応答して発生する可能性があります。これはあなたが探しているものかもしれません

于 2013-08-24T18:26:24.933 に答える