C# 订阅服务器的onNext操作未在ViewDidLoad中激发,但在同一类中激发

C# 订阅服务器的onNext操作未在ViewDidLoad中激发,但在同一类中激发,c#,.net,events,xamarin.ios,system.reactive,C#,.net,Events,Xamarin.ios,System.reactive,我正在使用Xamarin.iOS开发一个聊天移动应用程序 我有一个名为MessageServices的类,它发出事件MessageAddedToDB 我有一个名为Services的类,我在其中初始化MessageServices类 服务中心 public MessageServices messageService; public IObservable<ChatMessage> receivedMessageObservable; public IObservable<Ch

我正在使用Xamarin.iOS开发一个聊天移动应用程序

我有一个名为MessageServices的类,它发出事件MessageAddedToDB

我有一个名为Services的类,我在其中初始化MessageServices类

服务中心

public MessageServices messageService;

public IObservable<ChatMessage> receivedMessageObservable;
public IObservable<ChatMessage> messageSuccessfullySentObservable;

public Services()
{
    messageService = new MessageServices();
    messageService.MessageAddedToDB += (message) =>
    {
        Debug.WriteLine(message.Message); //This gets fired
    }


   AddObservables();
}

public void AddObservables()
{
    receivedMessageObservable = Observable.FromEvent<MessageAddedToDBEventHandler, ChatMessage>(
    (handler) =>
    {
        MessageAddedToDBEventHandler messageAddedToDBEventHandler = (ChatMessage m) =>
        {
            handler(m);
        };
        return messageAddedToDBEventHandler;
    },
    ev => messageService.MessageAddedToDB += ev,
    ev => messageService.MessageAddedToDB -= ev);

    receivedMessageObservable.Subscribe(onNext: (m) =>
    {
        Debug.WriteLine(m.Message); // This gets fired
    }

    messageSuccessfullySentObservable = Observable.FromEvent<MessageSuccessfullySentEventHandler, ChatMessage>
        (
            (handler) =>
            {
                MessageSuccessfullySentEventHandler messageSuccessfullySentEventHandler = (ChatMessage m) =>
                {
                    handler(m);
                };

                return messageSuccessfullySentEventHandler;
            },
            ev => httpHandler.MessageSuccessfullySent += ev,
            ev => httpHandler.MessageSuccessfullySent -= ev
        );
}

我在Services类中还有其他可观察对象,比如messageSuccessfullySentObservable,在这里我以与receivedMessageObservable相同的方式初始化它们。ViewController中的订阅服务器的初始化方式与我对receivedMessageSubscriber的初始化方式相同。其他订阅者的行为将被解雇。

您的代码工作得非常好。试试这个:

void Main()
{
    var messageService = new MessageService();

    var messageReceivedObservable = Observable.FromEvent<MessageAddedToDBEventHandler, ChatMessage>(
        handler =>
        {
            MessageAddedToDBEventHandler messageAddedToDBEventHandler = (ChatMessage m) =>
            {
                handler(m);
                return m;
            };
            return messageAddedToDBEventHandler;
        },
        ev => messageService.MessageAddedToDB += ev,
        ev => messageService.MessageAddedToDB -= ev
    );

    messageReceivedObservable
    .Subscribe((message) =>
    {
        Console.WriteLine(message);
    });         

    messageService.Raise();
    messageService.Raise();
}

public delegate ChatMessage MessageAddedToDBEventHandler(ChatMessage m);

public class MessageService
{
    public event MessageAddedToDBEventHandler MessageAddedToDB;
    public void Raise()
    {
        this.MessageAddedToDB?.Invoke(new ChatMessage());
    }
}

public class ChatMessage { }

你的代码中一定有你没有展示给我们的东西。

你是说从未调用subscribe方法,还是说从未调用subscribe委托?@Enigmativity我的意思是从未调用subscribe委托没有IDisposable这样的类型。这不是真正的代码。你只调用过一个新的MessageServices和一个新的Services吗?@Enigmativity你是对的,我发现Services类有两个不同的实例,触发messageService事件的类没有订阅可观察对象,所以我创建了一个静态Services类,它成功了。非常感谢您的时间我不知道我已经尝试添加了普通的EventHandler,代理被调用,但是subscribe方法的操作没有被调用我在一个单独的项目上尝试了您的代码,您是对的,它可以工作@Enigmativity@husamdev-然后是您的messageService没有引发事件。我使用+=,添加了一个普通的事件处理程序,并调用了它。实际上,在同一个类中,订阅者的onNext会被调用,但在另一个类中则不会@Enigmativity@husamdev-你需要一份能证明你的问题的报告。
void Main()
{
    var messageService = new MessageService();

    var messageReceivedObservable = Observable.FromEvent<MessageAddedToDBEventHandler, ChatMessage>(
        handler =>
        {
            MessageAddedToDBEventHandler messageAddedToDBEventHandler = (ChatMessage m) =>
            {
                handler(m);
                return m;
            };
            return messageAddedToDBEventHandler;
        },
        ev => messageService.MessageAddedToDB += ev,
        ev => messageService.MessageAddedToDB -= ev
    );

    messageReceivedObservable
    .Subscribe((message) =>
    {
        Console.WriteLine(message);
    });         

    messageService.Raise();
    messageService.Raise();
}

public delegate ChatMessage MessageAddedToDBEventHandler(ChatMessage m);

public class MessageService
{
    public event MessageAddedToDBEventHandler MessageAddedToDB;
    public void Raise()
    {
        this.MessageAddedToDB?.Invoke(new ChatMessage());
    }
}

public class ChatMessage { }