我最近开始学习Rx并尝试使用事件进行Rx转换。我尝试使用NetworkInformation.NetworkStatusChanged事件在Window Phone 8中创建Network Observable。
但是当我使用Observable.FromEventPattern添加NetworkInformation.NetworkStatusChanged时,如下所示:
var networkInformationStatus = Observable.FromEventPattern(typeof(NetworkInformation), "NetworkStatusChanged");
networkInformationStatus.Subscribe(x =>
{
txtClickdata.Text = string.Format("Is internet connected: {0}", NetworkInterface.GetIsNetworkAvailable());
txtClickdata2.Text = string.Format("Network type: {0}", NetworkInterface.NetworkInterfaceType);
});
我做错了什么?如何将此事件添加到Observable?
答案 0 :(得分:4)
如果您阅读有关您正在使用的方法的文档,则表示仅适用于
符合标准.NET事件模式的事件,带有System.EventArgs参数
NetworkInformation.NetworkStatusChanged
是一种非标准的事件类型,因此您需要将FromEvent
与转化过载一起使用。
Observable.FromEvent<NetworkStatusChangedEventHandler, object>(
emit => new NetworkStatusChangedEventHandler(
(target) => emit(target)),
h => NetworkInformation.NetworkStatusChanged += h,
h => NetworkInformation.NetworkStatusChanged -= h);
这将允许Rx正确转换传入的事件。