Add CriticalSection for file ops

This commit is contained in:
Andrew Welker
2020-12-08 12:54:35 -07:00
parent 748b1ca147
commit 169e897748

View File

@@ -15,6 +15,7 @@ namespace PepperDash.Essentials.Core.Presets
/// </summary> /// </summary>
public class DevicePresetsModel : Device public class DevicePresetsModel : Device
{ {
private CCriticalSection _fileOps = new CCriticalSection();
private readonly bool _initSuccess; private readonly bool _initSuccess;
/// <summary> /// <summary>
@@ -101,6 +102,9 @@ namespace PepperDash.Essentials.Core.Presets
public void LoadChannels() public void LoadChannels()
{ {
try
{
_fileOps.Enter();
PresetsAreLoaded = false; PresetsAreLoaded = false;
try try
{ {
@@ -124,6 +128,11 @@ namespace PepperDash.Essentials.Core.Presets
handler(this, EventArgs.Empty); handler(this, EventArgs.Empty);
} }
} }
finally
{
_fileOps.Leave();
}
}
public void Dial(int presetNum) public void Dial(int presetNum)
{ {
@@ -209,6 +218,9 @@ namespace PepperDash.Essentials.Core.Presets
private void SavePresets() private void SavePresets()
{ {
try
{
_fileOps.Enter();
var json = JsonConvert.SerializeObject(PresetsList); var json = JsonConvert.SerializeObject(PresetsList);
using (var file = File.Open(_filePath, FileMode.Truncate)) using (var file = File.Open(_filePath, FileMode.Truncate))
@@ -216,6 +228,12 @@ namespace PepperDash.Essentials.Core.Presets
file.Write(json, Encoding.UTF8); file.Write(json, Encoding.UTF8);
} }
} }
finally
{
_fileOps.Leave();
}
}
private void Pulse(Action<bool> act) private void Pulse(Action<bool> act)
{ {