0

すべての ViewModel クラスは基本クラスから継承します。

public abstract class ScreenBase : ViewModelBase, IScreen, IDisposable
{
  protected readonly NLog.Logger _logger;
  protected ScreenBase()
        : this(Messenger.Default) { }

  protected ScreenBase(IMessenger messenger)
        : base(messenger)
  {
    _logger = NLog.LogManager.GetLogger(this.GetType().Name);
    _logger.Debug("{0} ({1}) constructed. ", this.GetType().Name, this.GetHashCode());
  }

  ~ScreenBase()
  {
    FinalizeProc();
  }

  [Conditional("DEBUG")]
  private void FinalizeProc()
  {
    _logger.Debug("{0} ({1}) Finalized. ", this.GetType().Name, this.GetHashCode());
  }
}

ご覧のとおり、ViewModel のインスタンスが作成/破棄されるたびに、ログに記録する必要があります。コンソール ウィンドウとファイルにログインしています。

<targets>
  <!-- add your targets here -->
  <target name="logDebugInfo" xsi:type="File" deleteOldFileOnStartup="true" fileName="${specialfolder:folder=CommonApplicationData}/MyApp/debug.txt" layout="${longdate} | ${uppercase:${level}} | ${stacktrace} | ${message}${onexception:EXCEPTION OCCURRED\:${exception:format=tostring}}" />
  <target name="console" xsi:type="Console" />
</targets>

<rules>
  <!-- add your logging rules here -->
  <logger name="*" minlevel="Trace" maxlevel="Info" writeTo="logDebugInfo" />
  <logger name="*" minlevel="Trace" writeTo="console" />   
</rules>

各メッセージは、アプリケーションが閉じられるまで適切に記録されます。メイン ビューで [X] 閉じるボタンが押された場合、コードで特に何もせず、アプリケーションを自動的に閉じます。ただし、その時点では「完了しました」というメッセージは表示されません。

誰でも理由を知っていますか?

4

1 に答える 1