TrayController.cs 2.7 KB

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