public ConnectionInfoViewModel(ObservablePhotonPeer peer) { this.MaxSize = "0B"; this.MaxSent = "0B"; this.MaxReceived = "0B"; this.Peer = new WeakReference(peer); this.GraphList = new CircularBuffer<UniRx.Tuple<int, int>>(lastWidth); var interval = TimeSpan.FromMilliseconds(100); var send = peer.ObserveSendOpCustom().Select(x => GetSize(x)).Buffer(interval, Scheduler.ThreadPool); var sendReceive = peer.ObserveOperationResponse().Select(x => GetSize(x.OperationResponse.Parameters)).Buffer(interval, Scheduler.ThreadPool); var receive = peer.ObserveReceiveEventData().Select(x => GetSize(x.Parameters)).Buffer(interval, Scheduler.ThreadPool); subscription = Observable.Zip(send, sendReceive, receive, (x, y, z) => Tuple.Create(x.Sum(), y.Sum() + z.Sum())) .Subscribe(x => { lock (GraphListLock) { TotalSent += x.Item1; TotalReceived += x.Item2; GraphList.Enqueue(x); } }); }