Skip to content

Commit 4d04428

Browse files
committed
disable RefreshButton while Refreshing
1 parent 3b4d5c1 commit 4d04428

File tree

1 file changed

+56
-45
lines changed

1 file changed

+56
-45
lines changed

WinSyncScroll/ViewModels/MainViewModel.cs

Lines changed: 56 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,10 @@ public sealed partial class MainViewModel : IDisposable
5151
[Notify]
5252
private AppState _appState = AppState.NotRunning;
5353

54-
public bool IsRefreshButtonEnabled => AppState == AppState.NotRunning;
54+
[Notify]
55+
private bool _isRefreshing;
56+
57+
public bool IsRefreshButtonEnabled => AppState == AppState.NotRunning && !IsRefreshing;
5558

5659
public bool IsStartButtonEnabled => AppState == AppState.NotRunning
5760
&& Source != null
@@ -404,63 +407,71 @@ await _dispatcher.InvokeAsync(async () =>
404407
private async Task RefreshWindowsAsync()
405408
{
406409
_logger.LogInformation("Refreshing windows");
410+
IsRefreshing = true;
407411

408-
var newWindows = await Task.Run(() => _winApiService.ListWindows());
412+
try
413+
{
414+
var newWindows = await Task.Run(() => _winApiService.ListWindows());
409415

410-
// remember the old windows to replace them with the new ones
411-
var oldSource = Source;
412-
var oldTarget = Target;
416+
// remember the old windows to replace them with the new ones
417+
var oldSource = Source;
418+
var oldTarget = Target;
413419

414-
// remove windows that are not in the new list
415-
var toBeRemoved = Windows
416-
.Where(w => newWindows.All(nw => nw.WindowHandle != w.WindowHandle))
417-
.ToList();
420+
// remove windows that are not in the new list
421+
var toBeRemoved = Windows
422+
.Where(w => newWindows.All(nw => nw.WindowHandle != w.WindowHandle))
423+
.ToList();
418424

419-
foreach (var window in toBeRemoved)
420-
{
421-
Windows.Remove(window);
422-
}
425+
foreach (var window in toBeRemoved)
426+
{
427+
Windows.Remove(window);
428+
}
423429

424-
// update windows that are in the new list
425-
var toBeUpdated = Windows
426-
.Join(newWindows,
427-
w => w.WindowHandle,
428-
nw => nw.WindowHandle,
429-
(w, nw) => new
430-
{
431-
OldWindow = w,
432-
NewWindow = nw,
433-
})
434-
.ToList();
430+
// update windows that are in the new list
431+
var toBeUpdated = Windows
432+
.Join(newWindows,
433+
w => w.WindowHandle,
434+
nw => nw.WindowHandle,
435+
(w, nw) => new
436+
{
437+
OldWindow = w,
438+
NewWindow = nw,
439+
})
440+
.ToList();
435441

436-
foreach (var windowToBeUpdated in toBeUpdated)
437-
{
438-
var i = Windows.IndexOf(windowToBeUpdated.OldWindow);
439-
if (i != -1)
442+
foreach (var windowToBeUpdated in toBeUpdated)
440443
{
441-
Windows[i] = windowToBeUpdated.NewWindow;
444+
var i = Windows.IndexOf(windowToBeUpdated.OldWindow);
445+
if (i != -1)
446+
{
447+
Windows[i] = windowToBeUpdated.NewWindow;
448+
}
442449
}
443-
}
444450

445-
// add windows that are not in the old list
446-
var toBeAdded = newWindows
447-
.Where(nw => Windows.All(w => nw.WindowHandle != w.WindowHandle))
448-
.ToList();
451+
// add windows that are not in the old list
452+
var toBeAdded = newWindows
453+
.Where(nw => Windows.All(w => nw.WindowHandle != w.WindowHandle))
454+
.ToList();
449455

450-
foreach (var window in toBeAdded)
451-
{
452-
Windows.Add(window);
453-
}
456+
foreach (var window in toBeAdded)
457+
{
458+
Windows.Add(window);
459+
}
454460

455-
// restore the old source and target windows
456-
if (oldSource != null)
457-
{
458-
Source = Windows.FirstOrDefault(w => w.WindowHandle == oldSource.WindowHandle);
459-
}
461+
// restore the old source and target windows
462+
if (oldSource != null)
463+
{
464+
Source = Windows.FirstOrDefault(w => w.WindowHandle == oldSource.WindowHandle);
465+
}
460466

461-
if (oldTarget != null)
467+
if (oldTarget != null)
468+
{
469+
Target = Windows.FirstOrDefault(w => w.WindowHandle == oldTarget.WindowHandle);
470+
}
471+
}
472+
finally
462473
{
463-
Target = Windows.FirstOrDefault(w => w.WindowHandle == oldTarget.WindowHandle);
474+
IsRefreshing = false;
464475
}
465476
}
466477

0 commit comments

Comments
 (0)