public void TestMerge() { BatchObservableCollection <Foo> original = new BatchObservableCollection <Foo>(10); original.Add(new Foo(1, "1")); original.Add(new Foo(2, "1")); original.Add(new Foo(3, "1")); original.Add(new Foo(5, "1")); original.Add(new Foo(7, "1")); //original.Add(new Foo(11, "1")); //original.Add(new Foo(13, "1")); //original.Add(new Foo(17, "1")); BatchObservableCollection <Foo> update = new BatchObservableCollection <Foo>(10); update.Add(new Foo(1, "_2")); update.Add(new Foo(3, "_2")); update.Add(new Foo(7, "_2")); update.Add(new Foo(9, "2")); update.Add(new Foo(10, "2")); //update.Add(new Foo(6, "1")); //update.Add(new Foo(7, "1")); //update.Add(new Foo(12, "1")); //update.Add(new Foo(13, "1")); //update.Add(new Foo(17, "1")); //update.Add(new Foo(23, "1")); //update.Add(new Foo(19, "1")); //update.Add(new Foo(29, "1")); original.CollectionChanged += (s, a) => { Assert.AreNotEqual(0, original.Count); }; original.Merge(update, (x, y) => { return(x.ID - y.ID); }, EquivelentItemMergeBehavior.ReplaceEqualItems); Assert.AreEqual(5, original.Count); Assert.AreEqual(original[0].ID, 1); Assert.AreEqual(original[0].Value, "_2"); Assert.AreEqual(original[1].ID, 3); Assert.AreEqual(original[1].Value, "_2"); Assert.AreEqual(original[2].ID, 7); Assert.AreEqual(original[2].Value, "_2"); Assert.AreEqual(original[3].ID, 9); Assert.AreEqual(original[3].Value, "2"); Assert.AreEqual(original[4].ID, 10); Assert.AreEqual(original[4].Value, "2"); }
public void TestMerge() { BatchObservableCollection<Foo> original = new BatchObservableCollection<Foo>(10); original.Add(new Foo(1, "1")); original.Add(new Foo(2, "1")); original.Add(new Foo(3, "1")); original.Add(new Foo(5, "1")); original.Add(new Foo(7, "1")); //original.Add(new Foo(11, "1")); //original.Add(new Foo(13, "1")); //original.Add(new Foo(17, "1")); BatchObservableCollection<Foo> update = new BatchObservableCollection<Foo>(10); update.Add(new Foo(1, "_2")); update.Add(new Foo(3, "_2")); update.Add(new Foo(7, "_2")); update.Add(new Foo(9, "2")); update.Add(new Foo(10, "2")); //update.Add(new Foo(6, "1")); //update.Add(new Foo(7, "1")); //update.Add(new Foo(12, "1")); //update.Add(new Foo(13, "1")); //update.Add(new Foo(17, "1")); //update.Add(new Foo(23, "1")); //update.Add(new Foo(19, "1")); //update.Add(new Foo(29, "1")); original.CollectionChanged += (s, a) => { Assert.AreNotEqual(0, original.Count); }; original.Merge(update, (x, y) => { return x.ID - y.ID; }, EquivelentItemMergeBehavior.ReplaceEqualItems); Assert.AreEqual(5, original.Count); Assert.AreEqual(original[0].ID, 1); Assert.AreEqual(original[0].Value, "_2"); Assert.AreEqual(original[1].ID, 3); Assert.AreEqual(original[1].Value, "_2"); Assert.AreEqual(original[2].ID, 7); Assert.AreEqual(original[2].Value, "_2"); Assert.AreEqual(original[3].ID, 9); Assert.AreEqual(original[3].Value, "2"); Assert.AreEqual(original[4].ID, 10); Assert.AreEqual(original[4].Value, "2"); }
public void TestOffThread() { ManualResetEvent ev = new ManualResetEvent(false); ThreadPool.QueueUserWorkItem((x) => { BatchObservableCollection <Foo> bc = new BatchObservableCollection <Foo>(2); bc.Add(new Foo()); bc.Add(new Foo()); bc.Add(new Foo()); Thread.Sleep(50); bc.Add(new Foo()); bc.Add(new Foo()); bc.Add(new Foo()); bc.Add(new Foo()); ev.Set(); }, null); ev.WaitOne(); }
private void OnUpdateUI() { if (StatisticsSelected) { PackageDiscardedWarning = false; TotalReceived = StringFormatUtils.GetSizeAsString(_rateMonitor.TotalReceivedBytes); RateReceive = StringFormatUtils.GetRateAsString(_rateMonitor.CurrentReceiveRate) + " (" + StringFormatUtils.GetSizeAsString(_rateMonitor.CurrentReceiveRate / 8) + "/s)"; TotalSent = StringFormatUtils.GetSizeAsString(_rateMonitor.TotalSentBytes); RateSend = StringFormatUtils.GetRateAsString(_rateMonitor.CurrentSendRate) + " (" + StringFormatUtils.GetSizeAsString(_rateMonitor.CurrentSendRate / 8) + "/s)";; // dont update conversation view if more than 100kbps // is received and view not selected. if (_rateMonitor.CurrentReceiveRate > 100000) { return; } } else { PackageDiscardedWarning = ((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) - _lastPackageDiscarded) < 10000; } _conversation.BeginBatch(); Transmission msg; while (_incomingQueue.TryTake(out msg)) { _conversation.Add(new ConversationItemViewModel(msg, _formatter)); } while (_conversation.Count > _incomingQueue.BoundedCapacity) { _conversation.RemoveAt(0); } _conversation.EndBatch(); }
public void TestOffThread() { ManualResetEvent ev = new ManualResetEvent(false); ThreadPool.QueueUserWorkItem((x) => { BatchObservableCollection<Foo> bc = new BatchObservableCollection<Foo>(2); bc.Add(new Foo()); bc.Add(new Foo()); bc.Add(new Foo()); Thread.Sleep(50); bc.Add(new Foo()); bc.Add(new Foo()); bc.Add(new Foo()); bc.Add(new Foo()); ev.Set(); }, null); ev.WaitOne(); }