Die folgende Klasse verfügt über zwei Methoden:
Code: Select all
LoadUserData()
Code: Select all
SaveUserData()
Code: Select all
public sealed class MainWindowViewModel : ViewModelBase
{
private static readonly SemaphoreSlim mySemaphore = new(1, 1);
public MainWindowViewModel() => LoadUserData();
private void LoadUserData() =>
Task.Run(async () =>
{
await mySemaphore.WaitAsync();
try
{
var items = await Task.WhenAll(UserDataManager.LoadUserItemsAsync());
Dispatcher.UIThread.Post(() =>
{
foreach (var item in items)
AddItem(item);
});
}
finally
{
mySemaphore.Release();
}
});
public void SaveUserData()
{
// should not save if loading didn't finish yet
if (mySemaphore.CurrentCount == 0)
return;
UserDataManager.SaveUserData(this.items);
}
}