コード例 #1
0
        private void ShowModel(Operation operation)
        {
            while (operation.Queue.TryTake(out IDataItem item, Timeout.Infinite))
            {
                Application.Current.Dispatcher.InvokeBackground(() =>
                {
                    modelService.AddOrUpdateItem(item, operation.Id);

                    for (int i = 0; i < BatchSize; i++)
                    {
                        if (!operation.Queue.TryTake(out item, 0))
                        {
                            break;
                        }

                        modelService.AddOrUpdateItem(item, operation.Id);
                    }
                });
            }

            BlockingCollection <IDataItem> queue = new BlockingCollection <IDataItem>();

            Application.Current.Dispatcher.InvokeBackground(() =>
            {
                IReadOnlyList <DataNode> allQueuedNodes = modelService.GetAllQueuedNodes();
                allQueuedNodes.ForEach(node => queue.Add(node));
                queue.CompleteAdding();
            });


            while (queue.TryTake(out IDataItem item, Timeout.Infinite))
            {
                Application.Current.Dispatcher.InvokeBackground(() =>
                {
                    modelService.AddOrUpdateItem(item, operation.Id);

                    for (int i = 0; i < BatchSize; i++)
                    {
                        if (!queue.TryTake(out item, 0))
                        {
                            break;
                        }

                        modelService.AddOrUpdateItem(item, operation.Id);
                    }
                });
            }
        }