TrayController.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. namespace EEMSUIClient.Services;
  2. public sealed class TrayController
  3. {
  4. private TaskbarIcon? _tray;
  5. private bool disposedValue;
  6. public TaskbarIcon? Tray
  7. {
  8. set
  9. {
  10. ObjectDisposedException.ThrowIf(disposedValue, nameof(_tray));
  11. _tray = value;
  12. }
  13. }
  14. public bool IsExiting { get; private set; }
  15. public void HideToTray()
  16. {
  17. var mainWindow = (MainWindow)Application.Current.MainWindow;
  18. mainWindow.ShowInTaskbar = false;
  19. mainWindow.Hide();
  20. }
  21. public void ShowMainWindow()
  22. {
  23. var mainWindow = (MainWindow)Application.Current.MainWindow;
  24. if (!mainWindow.IsVisible)
  25. {
  26. mainWindow.Show();
  27. }
  28. mainWindow.WindowState = WindowState.Normal;
  29. mainWindow.ShowInTaskbar = true;
  30. mainWindow.Activate();
  31. mainWindow.Topmost = true;
  32. mainWindow.Topmost = false;
  33. mainWindow.Focus();
  34. }
  35. public void Exit()
  36. {
  37. IsExiting = true;
  38. Application.Current.MainWindow?.Close();
  39. Application.Current.Shutdown();
  40. }
  41. public void ShowBalloonTip()
  42. {
  43. _tray?.ShowBalloonTip("EEMS Client", "服务正在后台运行...", BalloonIcon.Info);
  44. }
  45. private void Dispose(bool disposing)
  46. {
  47. if (!disposedValue)
  48. {
  49. if (disposing)
  50. {
  51. // TODO: dispose managed state (managed objects)
  52. if (_tray != null)
  53. {
  54. _tray.Visibility = Visibility.Hidden;
  55. _tray.Dispose();
  56. _tray = null;
  57. }
  58. }
  59. // TODO: free unmanaged resources (unmanaged objects) and override finalizer
  60. // TODO: set large fields to null
  61. disposedValue = true;
  62. }
  63. }
  64. // // TODO: override finalizer only if 'Dispose(bool disposing)' has code to free unmanaged resources
  65. // ~TrayController()
  66. // {
  67. // // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
  68. // Dispose(disposing: false);
  69. // }
  70. public void Dispose()
  71. {
  72. // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
  73. Dispose(disposing: true);
  74. GC.SuppressFinalize(this);
  75. }
  76. }