C# 订阅服务器的onNext操作未在ViewDidLoad中激发,但在同一类中激发
我正在使用Xamarin.iOS开发一个聊天移动应用程序 我有一个名为MessageServices的类,它发出事件MessageAddedToDB 我有一个名为Services的类,我在其中初始化MessageServices类 服务中心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
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 { }