Category: C#

Simple Event Aggregator in C#

In this post, I’ll go through the inner workings of Event Aggregators, what it is, how to make one, and how to use it. Consider this another brain-dump of past knowledge to assist you in learning something new, or enhancing what you’ve previously known. This article focus on a single application; in another article, we’ll cover IPC (inter-process communication) in a similar fashion. In C#, an Event Aggregator is a design pattern that facilitates loosely coupled communication between different parts of an application, particularly between components that do not have direct references to each other. It acts as a central hub…

Prism.Avalonia

Prism.Avalonia is a library that extends the Prism framework’s capabilities to Avalonia UI applications. Avalonia UI is a cross-platform .NET UI framework that enables the development of desktop applications for Windows, Linux, and macOS, and also supports mobile and web targets. Prism is a framework designed to help build loosely coupled, maintainable, and testable XAML applications by implementing design patterns such as MVVM (Model-View-ViewModel), dependency injection, commands, and an EventAggregator for messaging. Prism.Avalonia specifically adapts these core Prism functionalities to the Avalonia UI platform, allowing developers to leverage Prism’s structured approach for: To use Prism.Avalonia, both the Prism.Avalonia core package and an associated…

C# Async/Await Under the Hood

Many of us use the async await operation in C# frequently, but how often do you peek under the hood? There’s a secret sauce that a lot of developers are unaware of that occurs. We’re going to take into the inner workings and find out where those extra clock-cycles go. The extra knowledge may help you write more efficient code. Sample Code Generated IL

Prometheus .NET Serialization

If you’ve ever used Prometheus or Prometheus-Net, you may have noticed that its Gauges use a JSON’ish implementation. And by “-ish” we mean that you cannot simply apply, System.Text.Json to deserialize the line. Here I’ll show you how to work with Prometheus to assist with your unit tests (aka automated tests, integration tests, etc). In this example, we’re going to extract the “Button Click” metrics sent by the app. Prometheus is an open-source systems monitoring solution to help collect metrics and alerts in your application. https://prometheus.io/docs/introduction/overview/ Below is an exert from the packet. Notice the key areas, “button_event_gauge“, the body…

.NET and Linux Bluetooth

Ever needed to perform some Bluetooth LE operations on your Linux device, whether it’s Raspberry PI, Ubuntu, or some other distribution? Yes, me too! In this article, we’ll dive right into using the Plugin.BlueZ NuGet package and show you how to get started using it. Feel free to contribute to the open source project over at the Suess Labs GitHub page, https://github.com/SuessLabs/Plugin.BlueZ. UPDATE! We are migrating towards the next generation package, Linux.Bluetooth NuGet package!The GA functionality is the same and future enhancements are coming soon, such as Battery monitoring. In this article, we’ll perform a simple Scanning for Devices based…

Visual Studio Linux Debugger

The VS Linux Debugger is an open-source tool created to assist with remotely deploying and debugging your Linux applications from Visual Studio 2022. Check it out on the Microsoft Marketplace or GitHub. To get started using it today it’s as easy as 1-2-3.. or perhaps, 2-3 Overview Before getting started, it is recommended to ensure your system has the latest updates. These steps have been tested against Ubuntu 20.04 LTE and 22.04 LTE. Though this project supports everywhere that .NET (Core) is supported, this section outlines steps for Ubuntu 22.04 LTE. It’s recommended to use the official Microsoft Install .NET…

C# 9.0 Null Checking

C# 9.0 added a lot of new features and enhanced others. Here we’re covering Pattern Matching, more specifically is null and is not null.  Beginning with C# 7.0, the “is” operator was added to match an expression against a pattern, and with C# 9.0 the negation pattern was added to do a non-null check. Overview So why not just use “==” or “!=” operators? When you override the operators, your traditional null checks can behave differently. This is why it can be safer for you to use the newer pattern matching. The addition of null checking using, “is null“, though…

Xamarin.Forms Floating Action Button

This article is a review of the Xamarin.Forms NuGet package, Floating Action Button (FAB). Here, we’ll be discussing what the library is, and how to use MVVM binding with Prism.Forms’ Navigation Service, and then finish up with some of the pros/cons of the library. For the full project, check out my GitHub page, Learn.FloatingActionButton, which this article references. I stumbled upon the Floating Action Button while responding to an inquiry made on the Xamarin Slack in regards to the forums thread, “Can I maintain a single static navigation service from Prism.Forms“. If you’re wondering, I’m, “User29117“. What is it? The…

Unit Testing Events with Timeouts

Ever need to perform a unit test on and want to timeout while waiting for an event? Doing a quick google search for, “C# unit test timeout waiting for event” yields interesting mixed results. Here are a few different methods for completing such a task. Method 1 – Task.WhenAny The following uses the System.Threadding.Task.WhenAny method wrapped inside of our async method, WaitUntil(..). Th Method 2 – Synchronous ManualResetEvent Slightly different implementation without the use of Tasks. Method 3 – TaskCompletionSource Method 4 – Task.WhenAny Asyncronyously awaiting Task.WhenAny allows you to provide a delay as you can see below.