Exemple #1
0
        public void Write_ConcurrentWrite_SuccessfullyWritesElementsToCollection()
        {
            var col = new ConcurrentObservableCollection <int>();

            var task1 = new Task(() =>
            {
                for (int i = 0; i < 1000; i++)
                {
                    col.Add(i);
                    Thread.Sleep(1);
                }
            });
            var task2 = new Task(() =>
            {
                for (int i = 0; i < 1000; i++)
                {
                    col.Clear();
                    Thread.Sleep(1);
                }
            });

            task1.Start();
            task2.Start();
            Task.WaitAll(task1, task2);

            col.Count.Should().BeLessThan(1000);
        }
        public void Test_ConcurrentObservableCollection_Clear()
        {
            var initial    = Enumerable.Range(0, 100).ToList();
            var collection = new ConcurrentObservableCollection <int>();

            collection.AddRange(initial);
            Assert.AreEqual(100, collection.Count);

            // Record all the collection changed events
            List <(object, NotifyCollectionChangedEventArgs)> returnedList = new List <(object, NotifyCollectionChangedEventArgs)>();

            collection.CollectionChanged += (s, e) => returnedList.Add((s, e));

            collection.Clear();

            // Check just one collection changed event was fired
            Assert.AreEqual(1, returnedList.Count);
            (var returnedObject, var returnedArgs) = returnedList[0];

            Assert.IsNotNull(returnedObject);
            Assert.IsNotNull(returnedArgs);

            Assert.AreEqual(0, collection.Count);

            Assert.AreEqual(returnedObject, collection);
            Assert.AreEqual(NotifyCollectionChangedAction.Remove, returnedArgs.Action);

            Assert.IsNull(returnedArgs.NewItems);

            Assert.IsNotNull(returnedArgs.OldItems);
            Assert.AreEqual(initial.Count(), returnedArgs.OldItems.Count);
            Assert.IsTrue(CollectionsAreEqual(initial, returnedArgs.OldItems));
        }
        public void Write_ConcurrentWrite_SuccessfullyWritesElementsToCollection()
        {
            var col = new ConcurrentObservableCollection <int>();

            var task1 = new Task(() =>
            {
                for (int i = 0; i < 1000; i++)
                {
                    col.Add(i);
                    Thread.Sleep(1);
                }
            });
            var task2 = new Task(() =>
            {
                for (int i = 0; i < 1000; i++)
                {
                    col.Clear();
                    Thread.Sleep(1);
                }
            });

            task1.Start();
            task2.Start();
            Task.WaitAll(new[] { task1, task2 });
            Assert.That(col.Count, Is.LessThan(1000));
#if NET45
            Debug.Print("Collection size: {0}", col.Count);
#endif
        }
 private void UpdateAllEpisodes()
 {
     lock (m_AllEpisodes)
     {
         if (m_AllEpisodes.SequenceEqual(Podcast.Episodes))
         {
             return;
         }
         m_AllEpisodes.Clear();
         m_AllEpisodes.AddAll(Podcast.Episodes);
     }
     UpdateVisibleEpisodes();
 }
Exemple #5
0
        public void Write_FiresResetEvent()
        {
            var  col   = new ConcurrentObservableCollection <string>(new[] { "b", "c" });
            bool fired = false;

            col.CollectionChanged += (sender, args) =>
            {
                if (args.Action == NotifyCollectionChangedAction.Reset)
                {
                    fired = true;
                }
            };
            col.Clear();

            fired.Should().BeTrue();
        }
Exemple #6
0
        public void ClearIsThreadSafe()
        {
            var test = new ConcurrentObservableCollection <int>(Concurrent)
            {
                1, 2, 3
            };

            var task1 = Task.Run(() =>
            {
                foreach (var i in test)
                {
                    Task.Delay(DelayTime).Wait();
                }
            });

            var task2 = Task.Run(() =>
            {
                Task.Delay(DelayTime).Wait();
                test.Clear();
            });

            Task.WaitAll(task1, task2);
        }
 protected void ClearMessages()
 {
     Messages.Clear();
 }