C# - よく使うクラス - CommunityToolkit

 クラウディア
1. 概要
2. メッセージ定義
3. メッセージ受信
4. メッセージ送信

1. 概要

 スレッド間で、メッセージキューを使いたかったのです。  本来の、「.NET Framework」には、もともと「System.Messaging」という、メッセージキューを処理するクラスがあるのですが。  「System.Messaging」は、ドメインで動いている「Windows」にしか機能しないようで、「Windows11 Home Edition」では、ドメインの設定ができない。  つまり、「Windows11 Home Edition」では、「System.Messaging」は使えない。  少なくとも、わたしの認識では、そうなのです。  では、何を使用するか・・・。  「Visual Studio 2022」を使用しているならば、「NuGet パッケージの管理」で、「CommunityToolkit.Mvvm」というパッケージをインストールして使用します。  本ページは、下記のサイトを参考にさせていただきました。
.NET standard2.x時代のMVVMライブラリ #C

2. メッセージ定義

 メッセージ名を、仮に「MessageHoge」としておきます。  受信側・送信側共に参照可能なファイルに、下記のように記述します。

using CommunityToolkit.Mvvm.Messaging;
using CommunityToolkit.Mvvm.Messaging.Messages;

namespace fuga
{
    public class MessageHoge : ValueChangedMessage<string>
    {
        public MessageHoge(string value) : base(value)
        {
        }
    }
}

3. メッセージ受信

 メッセージ受信側の記述です。  コンストラクタなり、なんなり、最初に受信する前に。  下記のようにイベントの登録を行います。  末尾の引数が、イベント発生時に、起動するメソッドです。

//// メッセージ受信イベント 登録
WeakReferenceMessenger.Default.Register<MessageHoge>(this, recvMesssage);
 受信時のメソッドは、下記のように記述します。  実際の処理は、それぞれで。

private void recvMesssage(object recipient, MessageHoge message)
{
	メッセージを「message.Value」で扱うことができます。
}

4. メッセージ送信

 送信側は、下記の形式で、メッセージを送信できます。

WeakReferenceMessenger.Default.Send(new MessageHoge(送信するメッセージ文字列);
 例では、定義時「ValueChangedMessage<string>」と記述しているので、文字列のメッセージを送信していますが、「<string>」内を。  別の型にすることで、文字列以外のものを送ることも可能なのではないかと思います(やってみていない)。  文字列が確実に送れることは、試験済です。
AbemaTV 無料体験