private void Refresh() { this.RaisePropertyChanged(nameof(VersionInfos)); this.RaisePropertyChanged(nameof(Logs)); AppLogger.Flush(); HelpView.SendScrollToEndLog(); }
private void App_Exit(object sender, ExitEventArgs e) { try { Config.Instance.Save(); Thread.Sleep(50); } finally { AppLogger.Write("madoka End."); AppLogger.Flush(); } }
private void App_Exit(object sender, ExitEventArgs e) { try { // グローバルキーフックを解除する SharlayanController.UnsubscribeKeyHook(); Config.Instance.Save(); ChatOverlaysController.Instance.Stop(); } finally { this.UnlockDuplicateStart(); AppLogger.Write("RINGS End."); AppLogger.Flush(); } }
private void App_DispatcherUnhandledException( object sender, DispatcherUnhandledExceptionEventArgs e) { try { // グローバルキーフックを解除する SharlayanController.UnsubscribeKeyHook(); Config.Instance.Save(); if (this.MainWindow != null) { MessageBoxHelper.ShowDialogMessageWindow( "RINGS - Fatal", "予期しない例外を検知しました。アプリケーションを終了します。", e.Exception); } else { MessageBox.Show( "予期しない例外を検知しました。アプリケーションを終了します。\n\n" + e.Exception, "RINGS - Fatal", MessageBoxButton.OK, MessageBoxImage.Error); } } finally { this.UnlockDuplicateStart(); AppLogger.Fatal( "Unhandled Exception. 予期しない例外を検知しました。", e.Exception); AppLogger.Write("RINGS Abort."); AppLogger.Flush(); } }
private void DetectProcessLoop() { Thread.Sleep(TimeSpan.FromSeconds(Config.Instance.ProcessScaningInterval)); while (true) { Thread.Sleep(TimeSpan.FromSeconds(Config.Instance.ProcessScaningInterval)); if (this.semaphore) { continue; } try { this.semaphore = true; this.DetectProcess(); } catch (ThreadAbortException) { return; } catch (Exception ex) { AppLogger.Error( "プロセススキャンスレッドで予期しない例外を検知しました。", ex); AppLogger.Flush(); Thread.Sleep(TimeSpan.FromSeconds(10)); } finally { this.semaphore = false; } } }
private void App_DispatcherUnhandledException( object sender, DispatcherUnhandledExceptionEventArgs e) { try { Config.Instance.Save(); Thread.Sleep(50); if (this.MainWindow != null) { MessageBoxHelper.ShowDialogMessageWindow( "madoka - Fatal", "予期しない例外を検知しました。アプリケーションを終了します。", e.Exception); } else { MessageBox.Show( "予期しない例外を検知しました。アプリケーションを終了します。\n\n" + e.Exception, "madoka - Fatal", MessageBoxButton.OK, MessageBoxImage.Error); } } finally { AppLogger.Fatal( "Unhandled Exception. 予期しない例外が発生しました。", e.Exception); AppLogger.Write("madoka Abort."); AppLogger.Flush(); } }
public static async Task <bool> IsUpdateAsync( ReleaseChannels updateChannel) { SetupSSL(); // アップデートChannelを保存する LastCheckedUpdateChannel = updateChannel; if (string.IsNullOrEmpty(UpdateSourceUri)) { return(false); } var now = DateTimeOffset.Now; var targetAssembly = Assembly.GetEntryAssembly(); try { // リリースノートを取得する var notes = await ReleaseNotes.DeserializeAsync(new Uri(UpdateSourceUri)); if (notes == null) { AppLogger.Error($"Update checker error. RELEASE_NOTES.xml not found. uri={UpdateSourceUri}"); return(false); } // より新しいバージョンがあるか? var newer = notes.GetNewerVersion( targetAssembly, updateChannel); if (newer == null) { AppLogger.Write("Update checker. this version is up-to-date."); return(false); } AppLogger.Write($"Update checker found newer version. v{newer.Version}-{newer.ReleaseChannel}"); // アップデートWindowを表示する await Application.Current.Dispatcher.InvokeAsync(() => { UpdateCheckerView.Show( notes.Name, targetAssembly, newer); }); } catch (Exception ex) { AppLogger.Fatal("Update checker fatal error.", ex); throw; } finally { LastUpdateCheckCallback?.Invoke(now); AppLogger.Flush(); } return(true); }