xamarin 使用WeakReferenceMessenger向异步回调发送带有值的消息

oknwwptz  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(205)

我一直在尝试实现WeakReferenceMessenger来在我的Xamarin应用程序中发送消息。我已经成功地使用它发送消息到一个异步回调使用以下.
消息类:

public class MyMessage : CollectionRequestMessage<Task>
{
    public MyMessage() { }
}

注册命令:

WeakReferenceMessenger.Default.Register<MyMessage>(this, MyCallbackAsync);

发送命令:

WeakReferenceMessenger.Default.Send(typeof(MyMessage));

扩展IMessengerExtensions:

public static partial class IMessengerExtensions
{
    public static void Register<T>(this IMessenger messenger, object recipient, Func<Task> asyncAction) where T : CollectionRequestMessage<Task>
    {
        messenger.Register<T>(recipient, (r, m) =>
        {
            var task = asyncAction();
            m.Reply(task);
        });
    }
}

我还向非异步回调发送了带有值的消息,如下所示...
消息类:

public class MyMessageWithString : ValueChangedMessage<string>
{
    public MyMessageWithString(string value) : base(value) { }
}

注册命令:

WeakReferenceMessenger.Default.Register<MyMessageWithString>(this, (r, m) => MyCallbackWithString(m.Value));

发送命令:

var instance = Activator.CreateInstance(typeof(MyMessageWithString), new object[] { "Hello world" }) as MyMessageWithString;

WeakReferenceMessenger.Default.Send(instance);

不幸的是,我还需要向异步回调发送一个带有值的消息,但我不知道如何使用CollectionRequestMessage传递值(它似乎没有像ValueChangedMessage那样公开Value属性)。有人能建议如何做到这一点吗?

djp7away

djp7away1#

不幸的是,我还需要向异步回调发送一个带有值的消息,但我不知道如何使用CollectionRequestMessage传递值(它似乎没有像ValueChangedMessage那样公开Value属性)。有人能建议如何做到这一点吗?
关于异步回调,你可以使用Moq框架的Callback方法,参考这个案例:Moq callback for ReturnsAsync

相关问题