diff --git a/src/Captura.Loc/LanguageFields.cs b/src/Captura.Loc/LanguageFields.cs
index 686f18567..baaed3ec2 100644
--- a/src/Captura.Loc/LanguageFields.cs
+++ b/src/Captura.Loc/LanguageFields.cs
@@ -27,7 +27,12 @@ void Set(string Value, [CallerMemberName] string PropertyName = null)
RaisePropertyChanged(PropertyName);
}
+ ///
+ /// Fired when the language changes. This event is invoked by derived classes (e.g., LanguageManager).
+ ///
+#pragma warning disable CS0067 // The event is never used - invoked by derived classes
public virtual event Action LanguageChanged;
+#pragma warning restore CS0067
public string About
{
diff --git a/src/Captura.MouseKeyHook/Steps/StepsRecorder.cs b/src/Captura.MouseKeyHook/Steps/StepsRecorder.cs
index d2b0f5c2b..1a9cf44cb 100644
--- a/src/Captura.MouseKeyHook/Steps/StepsRecorder.cs
+++ b/src/Captura.MouseKeyHook/Steps/StepsRecorder.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Reactive;
using System.Reactive.Linq;
using System.Reactive.Subjects;
@@ -167,23 +167,52 @@ public StepsRecorder(IMouseKeyHook Hook,
void DoRecord(IObservable StepsObservable, IObservable ShotObservable)
{
- var frames = ShotObservable.Select(M => _imageProvider.Capture())
- .Zip(StepsObservable, (Frame, Step) =>
- {
- Step.Draw(Frame, _imageProvider.PointTransform);
+ try
+ {
+ var frames = ShotObservable.Select(M => _imageProvider.Capture())
+ .Zip(StepsObservable, (Frame, Step) =>
+ {
+ Step.Draw(Frame, _imageProvider.PointTransform);
- return Frame.GenerateFrame(TimeSpan.Zero);
- });
+ return Frame.GenerateFrame(TimeSpan.Zero);
+ });
- foreach (var frame in frames.ToEnumerable())
+ foreach (var frame in frames.ToEnumerable())
+ {
+ _videoWriter.WriteFrame(frame);
+ }
+ }
+ catch (Exception e)
{
- _videoWriter.WriteFrame(frame);
+ ErrorOccurred?.Invoke(e);
}
}
- public void Start() => _recording = true;
+ public void Start()
+ {
+ try
+ {
+ _recording = true;
+ }
+ catch (Exception e)
+ {
+ ErrorOccurred?.Invoke(e);
+ throw;
+ }
+ }
- public void Stop() => _recording = false;
+ public void Stop()
+ {
+ try
+ {
+ _recording = false;
+ }
+ catch (Exception e)
+ {
+ ErrorOccurred?.Invoke(e);
+ throw;
+ }
+ }
public event Action ErrorOccurred;
diff --git a/src/Screna/AudioRecorder.cs b/src/Screna/AudioRecorder.cs
index 672c77971..85dc04d75 100644
--- a/src/Screna/AudioRecorder.cs
+++ b/src/Screna/AudioRecorder.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Threading;
using System.Threading.Tasks;
@@ -54,16 +54,32 @@ public void Dispose()
public void Start()
{
- _audioProvider.Start();
+ try
+ {
+ _audioProvider.Start();
- _continueEvent.Set();
+ _continueEvent.Set();
+ }
+ catch (Exception e)
+ {
+ ErrorOccurred?.Invoke(e);
+ throw;
+ }
}
public void Stop()
{
- _continueEvent.Reset();
+ try
+ {
+ _continueEvent.Reset();
- _audioProvider.Stop();
+ _audioProvider.Stop();
+ }
+ catch (Exception e)
+ {
+ ErrorOccurred?.Invoke(e);
+ throw;
+ }
}
void Loop()
@@ -80,13 +96,20 @@ bool CanContinue()
}
}
- while (CanContinue())
+ try
{
- var read = _audioProvider.Read(_buffer, 0, _buffer.Length);
+ while (CanContinue())
+ {
+ var read = _audioProvider.Read(_buffer, 0, _buffer.Length);
- _audioWriter.Write(_buffer, 0, read);
+ _audioWriter.Write(_buffer, 0, read);
- Thread.Sleep(ReadInterval);
+ Thread.Sleep(ReadInterval);
+ }
+ }
+ catch (Exception e)
+ {
+ ErrorOccurred?.Invoke(e);
}
}