@@ -18,6 +18,7 @@ namespace OpenHardwareMonitor.UI;
1818public sealed partial class MainForm : Form
1919{
2020 private readonly UserOption _autoStart ;
21+ private readonly UserOption _autoUpdate ;
2122 private readonly Computer _computer ;
2223 private readonly SensorGadget _gadget ;
2324 private readonly Logger _logger ;
@@ -48,20 +49,21 @@ public sealed partial class MainForm : Form
4849
4950 private int _delayCount ;
5051 private bool _selectionDragging ;
52+ private DateTime _nextUpdateCheckTime ;
5153
5254 public MainForm ( )
5355 {
5456 InitializeComponent ( ) ;
5557
56- this . sensor . WidthChanged += delegate { TreeView_ColumnWidthChanged ( this . sensor ) ; } ;
57- this . value . WidthChanged += delegate { TreeView_ColumnWidthChanged ( this . value ) ; } ;
58- this . min . WidthChanged += delegate { TreeView_ColumnWidthChanged ( this . min ) ; } ;
59- this . max . WidthChanged += delegate { TreeView_ColumnWidthChanged ( this . max ) ; } ;
58+ sensor . WidthChanged += delegate { TreeView_ColumnWidthChanged ( this . sensor ) ; } ;
59+ value . WidthChanged += delegate { TreeView_ColumnWidthChanged ( this . value ) ; } ;
60+ min . WidthChanged += delegate { TreeView_ColumnWidthChanged ( this . min ) ; } ;
61+ max . WidthChanged += delegate { TreeView_ColumnWidthChanged ( this . max ) ; } ;
6062
6163 _settings = new PersistentSettings ( ) ;
6264 _settings . Load ( ) ;
6365
64- this . MinimumSize = new Size ( 400 , 200 ) ;
66+ MinimumSize = new Size ( 400 , 200 ) ;
6567 Text = Updater . ApplicationTitle ;
6668 Icon = Icon . ExtractAssociatedIcon ( Updater . CurrentFileLocation ) ;
6769 portableModeMenuItem . Checked = _settings . IsPortable ;
@@ -115,7 +117,7 @@ public MainForm()
115117
116118 _systemTray = new SystemTray ( _computer , _settings ) ;
117119 _systemTray . HideShowCommand += HideShowClick ;
118- _systemTray . ExitCommand += ExitClick ;
120+ _systemTray . ExitCommand += CloseApplication ;
119121
120122 if ( OperatingSystemHelper . IsUnix )
121123 {
@@ -173,6 +175,11 @@ public MainForm()
173175
174176 _minimizeOnClose = new UserOption ( "minCloseMenuItem" , false , minCloseMenuItem , _settings ) ;
175177
178+ _autoUpdate = new UserOption ( "autoUpdateAppMenuItem" , false , autoUpdateAppMenuItem , _settings ) ;
179+ _autoUpdate . Changed += delegate {
180+ _nextUpdateCheckTime = _autoUpdate . Value ? DateTime . Now . AddSeconds ( 3 ) : DateTime . MinValue ;
181+ } ;
182+
176183 _autoStart = new UserOption ( null , _startupManager . Startup , startupMenuItem , _settings ) ;
177184 _autoStart . Changed += delegate
178185 {
@@ -233,7 +240,6 @@ public MainForm()
233240 // Prevent Menu From Closing When UnClicking Hardware Items
234241 menuItemFileHardware . DropDown . Closing += StopFileHardwareMenuFromClosing ;
235242
236-
237243 _showGadget . Changed += delegate
238244 {
239245 if ( _gadget != null )
@@ -292,48 +298,22 @@ public MainForm()
292298
293299 _loggingInterval . Changed += ( _ , _ ) =>
294300 {
295- switch ( _loggingInterval . Value )
301+ _logger . LoggingInterval = _loggingInterval . Value switch
296302 {
297- case 0 :
298- _logger . LoggingInterval = new TimeSpan ( 0 , 0 , 1 ) ;
299- break ;
300- case 1 :
301- _logger . LoggingInterval = new TimeSpan ( 0 , 0 , 2 ) ;
302- break ;
303- case 2 :
304- _logger . LoggingInterval = new TimeSpan ( 0 , 0 , 5 ) ;
305- break ;
306- case 3 :
307- _logger . LoggingInterval = new TimeSpan ( 0 , 0 , 10 ) ;
308- break ;
309- case 4 :
310- _logger . LoggingInterval = new TimeSpan ( 0 , 0 , 30 ) ;
311- break ;
312- case 5 :
313- _logger . LoggingInterval = new TimeSpan ( 0 , 1 , 0 ) ;
314- break ;
315- case 6 :
316- _logger . LoggingInterval = new TimeSpan ( 0 , 2 , 0 ) ;
317- break ;
318- case 7 :
319- _logger . LoggingInterval = new TimeSpan ( 0 , 5 , 0 ) ;
320- break ;
321- case 8 :
322- _logger . LoggingInterval = new TimeSpan ( 0 , 10 , 0 ) ;
323- break ;
324- case 9 :
325- _logger . LoggingInterval = new TimeSpan ( 0 , 30 , 0 ) ;
326- break ;
327- case 10 :
328- _logger . LoggingInterval = new TimeSpan ( 1 , 0 , 0 ) ;
329- break ;
330- case 11 :
331- _logger . LoggingInterval = new TimeSpan ( 2 , 0 , 0 ) ;
332- break ;
333- case 12 :
334- _logger . LoggingInterval = new TimeSpan ( 6 , 0 , 0 ) ;
335- break ;
336- }
303+ 0 => new TimeSpan ( 0 , 0 , 1 ) ,
304+ 1 => new TimeSpan ( 0 , 0 , 2 ) ,
305+ 2 => new TimeSpan ( 0 , 0 , 5 ) ,
306+ 3 => new TimeSpan ( 0 , 0 , 10 ) ,
307+ 4 => new TimeSpan ( 0 , 0 , 30 ) ,
308+ 5 => new TimeSpan ( 0 , 1 , 0 ) ,
309+ 6 => new TimeSpan ( 0 , 2 , 0 ) ,
310+ 7 => new TimeSpan ( 0 , 5 , 0 ) ,
311+ 8 => new TimeSpan ( 0 , 10 , 0 ) ,
312+ 9 => new TimeSpan ( 0 , 30 , 0 ) ,
313+ 10 => new TimeSpan ( 1 , 0 , 0 ) ,
314+ 11 => new TimeSpan ( 2 , 0 , 0 ) ,
315+ _ => new TimeSpan ( 6 , 0 , 0 ) ,
316+ } ;
337317 } ;
338318
339319 _updateInterval = new UserRadioGroup ( "updateIntervalMenuItem" ,
@@ -351,27 +331,15 @@ public MainForm()
351331
352332 _updateInterval . Changed += ( _ , _ ) =>
353333 {
354- switch ( _updateInterval . Value )
334+ timer . Interval = _updateInterval . Value switch
355335 {
356- case 0 :
357- timer . Interval = 250 ;
358- break ;
359- case 1 :
360- timer . Interval = 500 ;
361- break ;
362- case 2 :
363- timer . Interval = 1000 ;
364- break ;
365- case 3 :
366- timer . Interval = 2000 ;
367- break ;
368- case 4 :
369- timer . Interval = 5000 ;
370- break ;
371- case 5 :
372- timer . Interval = 10000 ;
373- break ;
374- }
336+ 0 => 250 ,
337+ 1 => 500 ,
338+ 2 => 1000 ,
339+ 3 => 2000 ,
340+ 4 => 5000 ,
341+ _ => 10000 ,
342+ } ;
375343 } ;
376344
377345 _throttleAtaUpdate = new UserOption ( "throttleAtaUpdateMenuItem" , false , throttleAtaUpdateMenuItem , _settings ) ;
@@ -451,17 +419,18 @@ public MainForm()
451419 Show ( ) ;
452420 }
453421
454- // Create a handle, otherwise calling Close() does not fire FormClosed
455-
422+ Updater . Subscribe (
423+ ( message , isError ) => {
424+ MessageBox . Show ( message , Updater . ApplicationName , MessageBoxButtons . OK , isError ? MessageBoxIcon . Warning : MessageBoxIcon . Information ) ;
425+ } ,
426+ ( message ) => {
427+ return MessageBox . Show ( message , Updater . ApplicationName , MessageBoxButtons . OKCancel , MessageBoxIcon . Question ) == DialogResult . OK ;
428+ } ,
429+ ( ) => CloseApplication ( null , EventArgs . Empty )
430+ ) ;
431+ FormClosed += CloseApplication ;
456432 // Make sure the settings are saved when the user logs off
457- Microsoft . Win32 . SystemEvents . SessionEnded += delegate
458- {
459- _computer . Close ( ) ;
460- SaveConfiguration ( ) ;
461- if ( _runWebServer . Value )
462- Server . Quit ( ) ;
463- } ;
464-
433+ Microsoft . Win32 . SystemEvents . SessionEnded += ( _ , _ ) => CloseApplication ( null , EventArgs . Empty ) ;
465434 Microsoft . Win32 . SystemEvents . PowerModeChanged += PowerModeChanged ;
466435 }
467436
@@ -586,11 +555,6 @@ private void NodeTextBoxText_EditorShowing(object sender, CancelEventArgs e)
586555 e . Cancel = ! ( treeView . CurrentNode != null && ( treeView . CurrentNode . Tag is SensorNode || treeView . CurrentNode . Tag is HardwareNode ) ) ;
587556 }
588557
589- private void ExitClick ( object sender , EventArgs e )
590- {
591- CloseApplication ( ) ;
592- }
593-
594558 private void Timer_Tick ( object sender , EventArgs e )
595559 {
596560 treeView . Invalidate ( ) ;
@@ -602,6 +566,12 @@ private void Timer_Tick(object sender, EventArgs e)
602566 backgroundUpdater . RunWorkerAsync ( ) ;
603567
604568 RestoreCollapsedNodeState ( treeView ) ;
569+
570+ if ( _nextUpdateCheckTime != DateTime . MinValue && _nextUpdateCheckTime < DateTime . Now )
571+ {
572+ _ = Updater . CheckForUpdatesAsync ( Updater . CheckUpdatesMode . AutoUpdate ) ;
573+ _nextUpdateCheckTime = _autoUpdate . Value ? DateTime . Now . AddHours ( 24 ) : DateTime . MinValue ;
574+ }
605575 }
606576
607577 private void SaveConfiguration ( )
@@ -647,18 +617,6 @@ private void MainForm_Load(object sender, EventArgs e)
647617
648618 RestoreCollapsedNodeState ( treeView ) ;
649619 treeView . Width += 1 ; //just to apply column auto-resize
650-
651- Updater . Subscribe (
652- ( message , isError ) => {
653- MessageBox . Show ( message , Updater . ApplicationName , MessageBoxButtons . OK , isError ? MessageBoxIcon . Warning : MessageBoxIcon . Information ) ;
654- } ,
655- ( message ) => {
656- return MessageBox . Show ( message , Updater . ApplicationName , MessageBoxButtons . OKCancel , MessageBoxIcon . Question ) == DialogResult . OK ;
657- } ,
658- Application . Exit
659- ) ;
660-
661- FormClosed += MainForm_FormClosed ;
662620 }
663621
664622 private void RestoreCollapsedNodeState ( TreeViewAdv treeViewAdv )
@@ -674,28 +632,33 @@ private void RestoreCollapsedNodeState(TreeViewAdv treeViewAdv)
674632 }
675633 }
676634
677- private void CloseApplication ( )
635+ private void CloseApplication ( object sender , EventArgs e )
678636 {
679- FormClosed -= MainForm_FormClosed ;
637+ FormClosed -= CloseApplication ;
638+ if ( InvokeRequired )
639+ {
640+ Invoke ( new EventHandler ( CloseApplication ) , sender , e ) ;
641+ return ;
642+ }
680643
681644 Visible = false ;
682- _systemTray . IsMainIconEnabled = false ;
645+
646+ backgroundUpdater ? . Dispose ( ) ;
683647 timer . Enabled = false ;
684- _computer . Close ( ) ;
685- SaveConfiguration ( ) ;
648+ timer ? . Dispose ( ) ;
649+
650+ _systemTray . IsMainIconEnabled = false ;
651+ _systemTray ? . Dispose ( ) ;
652+
686653 if ( _runWebServer . Value )
687- Server . Quit ( ) ;
654+ Server ? . Quit ( ) ;
688655
689- _systemTray . Dispose ( ) ;
690- timer . Dispose ( ) ;
691- backgroundUpdater . Dispose ( ) ;
656+ _computer ? . Close ( ) ;
692657
693- Application . Exit ( ) ;
694- }
658+ SaveConfiguration ( ) ;
695659
696- private void MainForm_FormClosed ( object sender , FormClosedEventArgs e )
697- {
698- CloseApplication ( ) ;
660+ Close ( ) ;
661+ Application . Exit ( ) ;
699662 }
700663
701664 private void menuItemSite_Click ( object sender , EventArgs e )
@@ -705,7 +668,7 @@ private void menuItemSite_Click(object sender, EventArgs e)
705668
706669 private void menuItemCheckUpdates_Click ( object sender , EventArgs e )
707670 {
708- Updater . CheckForUpdates ( false ) ;
671+ Updater . CheckForUpdates ( Updater . CheckUpdatesMode . AllMessages ) ;
709672 }
710673
711674 private void AboutMenuItem_Click ( object sender , EventArgs e )
0 commit comments