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>」内を。
別の型にすることで、文字列以外のものを送ることも可能なのではないかと思います(やってみていない)。
文字列が確実に送れることは、試験済です。
|
|