Denxorz.Latch
1.0.4
dotnet add package Denxorz.Latch --version 1.0.4
NuGet\Install-Package Denxorz.Latch -Version 1.0.4
<PackageReference Include="Denxorz.Latch" Version="1.0.4" />
paket add Denxorz.Latch --version 1.0.4
#r "nuget: Denxorz.Latch, 1.0.4"
// Install Denxorz.Latch as a Cake Addin #addin nuget:?package=Denxorz.Latch&version=1.0.4 // Install Denxorz.Latch as a Cake Tool #tool nuget:?package=Denxorz.Latch&version=1.0.4
Latch
What does it do?
Latch makes sure that a piece of code is not executed when another piece of code is executing.
This package is based on the following articles:
- http://www.minddriven.de/index.php/technology/development/design-patterns/latch-design-pattern
- http://codebetter.com/jeremymiller/2007/07/02/build-your-own-cab-12-rein-in-runaway-events-with-the-quot-latch-quot/
Examples
// Remove the event handler for the moment
someComboBox.SelectedIndexChanged -= someHandler;
// do something that would probably make someComboBox fire the SelectedIndexChanged event
// Put the event handler back
someComboBox.SelectedIndexChanged += someHandler;
This example shows a common WinForms problem which can be solved with a latch.
// Declare the Latch as field: Latch someComboBoxLatch = new Latch();
someComboBoxLatch.RunInsideLatch(() =>
{
// do something that would probably make someComboBox fire the SelectedIndexChanged event
});
Surrounding the critical code by the latch makes sure it is only executed once. Recursive calls and StackOverflows can be avoided.
// Declare the FullLatch as field: FullLatch someLatch = new FullLatch();
someLatch.LatchAndRun(() =>
{
// do something and make sure the latch is set
});
someLatch.RunIfNotLatched(() =>
{
// do something that should only run when not latched
});
This way you will have full control over the latch, and you can choose which parts latch and which parts are only run if not latched.
Tools and Products Used
- Microsoft Visual Studio Community
- JetBrains Resharper
- NUnit
- FakeItEasy
- Inedo ProGet
- Icons8
- NuGet
- GitHub
Versions & Release Notes
version 1.0.3: Added .NET 8.0
version 1.0.2: Added .NET 5.0
version 1.0.1: Added .NET standard 2.0
version 1.0.0: First version (.NET Framework 4.5.2)
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net452 is compatible. net46 was computed. net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.5.2
- No dependencies.
-
.NETStandard 2.0
- No dependencies.
-
net5.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.