コード例 #1
0
        /// <summary>
        /// Perform an asynchronous dataset walk.
        /// </summary>
        /// <param name="walker">Walker implementation.</param>
        /// <param name="items">Queue of internal items; must be initialized and empty when called from external method.</param>
        private static async Task DoWalkAsync(IDicomDatasetWalker walker, Queue <DicomItem> items)
        {
            try
            {
                walker.OnBeginWalk();

                while (items.Count > 0)
                {
                    var item = items.Dequeue();

                    if (item is DicomElement)
                    {
                        await walker.OnElementAsync(item as DicomElement).ConfigureAwait(false);
                    }
                    else if (item is DicomFragmentSequence)
                    {
                        walker.OnBeginFragment(item as DicomFragmentSequence);
                    }
                    else if (item is DicomFragmentItem)
                    {
                        await walker.OnFragmentItemAsync((item as DicomFragmentItem).Buffer).ConfigureAwait(false);
                    }
                    else if (item is EndDicomFragment)
                    {
                        walker.OnEndFragment();
                    }
                    else if (item is DicomSequence)
                    {
                        walker.OnBeginSequence(item as DicomSequence);
                    }
                    else if (item is BeginDicomSequenceItem)
                    {
                        walker.OnBeginSequenceItem((item as BeginDicomSequenceItem).Dataset);
                    }
                    else if (item is EndDicomSequenceItem)
                    {
                        walker.OnEndSequenceItem();
                    }
                    else if (item is EndDicomSequence)
                    {
                        walker.OnEndSequence();
                    }
                }

                walker.OnEndWalk();
            }
            catch (Exception e)
            {
                try
                {
                    walker.OnEndWalk();
                    throw;
                }
                catch
                {
                    throw e;
                }
            }
        }
コード例 #2
0
ファイル: DicomDatasetWalker.cs プロジェクト: GMZ/fo-dicom
 public IAsyncResult BeginWalk(IDicomDatasetWalker walker, AsyncCallback callback, object state)
 {
     _walker = walker;
     _exception = null;
     _async = new EventAsyncResult(callback, state);
     ThreadPool.QueueUserWorkItem(Walk, null);
     return _async;
 }
コード例 #3
0
 public static IAsyncResult BeginWalk(
     this DicomDatasetWalker @this,
     IDicomDatasetWalker walker,
     AsyncCallback callback,
     object state)
 {
     return(AsyncFactory.ToBegin(@this.WalkAsync(walker), callback, state));
 }
コード例 #4
0
ファイル: DicomDatasetWalker.cs プロジェクト: zinan/fo-dicom
        /// <summary>
        /// Perform an asynchronous "walk" across the DICOM dataset provided in the <see cref="DicomDatasetWalker"/> constructor.
        /// </summary>
        /// <param name="walker">Dataset walker implementation to be used for dataset traversal.</param>
        /// <returns>Awaitable <see cref="Task"/>.</returns>
        public Task WalkAsync(IDicomDatasetWalker walker)
        {
            var items = new Queue <DicomItem>();

            BuildWalkQueue(this._dataset, items);

            return(DoWalkAsync(walker, items));
        }
コード例 #5
0
ファイル: DicomDatasetWalker.cs プロジェクト: zinan/fo-dicom
        /// <summary>
        /// Perform a synchronous "walk" across the DICOM dataset provided in the <see cref="DicomDatasetWalker"/> constructor.
        /// </summary>
        /// <param name="walker">Dataset walker implementation to be used for dataset traversal.</param>
        public void Walk(IDicomDatasetWalker walker)
        {
            var items = new Queue <DicomItem>();

            BuildWalkQueue(this._dataset, items);

            DoWalk(walker, items);
        }
コード例 #6
0
 public static IAsyncResult BeginWalk(
     this DicomDatasetWalker @this,
     IDicomDatasetWalker walker,
     AsyncCallback callback,
     object state)
 {
     return AsyncFactory.ToBegin(@this.WalkAsync(walker), callback, state);
 }
コード例 #7
0
 public IAsyncResult BeginWalk(IDicomDatasetWalker walker, AsyncCallback callback, object state)
 {
     _walker    = walker;
     _exception = null;
     _async     = new EventAsyncResult(callback, state);
     ThreadPool.QueueUserWorkItem(Walk, null);
     return(_async);
 }
コード例 #8
0
        /// <summary>
        /// Perform an asynchronous "walk" across the DICOM dataset provided in the <see cref="DicomDatasetWalker"/> constructor.
        /// </summary>
        /// <param name="walker">Dataset walker implementation to be used for dataset traversal.</param>
        /// <returns>Awaitable <see cref="Task"/>.</returns>
        public Task WalkAsync(IDicomDatasetWalker walker)
        {
            _dataset.OnBeforeSerializing();
            var items = new Queue <DicomItem>();

            BuildWalkQueue(_dataset, items);

            return(DoWalkAsync(walker, items));
        }
コード例 #9
0
        /// <summary>
        /// Perform a synchronous "walk" across the DICOM dataset provided in the <see cref="DicomDatasetWalker"/> constructor.
        /// </summary>
        /// <param name="walker">Dataset walker implementation to be used for dataset traversal.</param>
        public void Walk(IDicomDatasetWalker walker)
        {
            _dataset.OnBeforeSerializing();
            var items = new Queue <DicomItem>();

            BuildWalkQueue(_dataset, items);

            DoWalk(walker, items);
        }
コード例 #10
0
        /// <summary>
        /// Perform an asynchronous dataset walk.
        /// </summary>
        /// <param name="walker">Walker implementation.</param>
        /// <param name="items">Queue of internal items; must be initialized and empty when called from external method.</param>
        private static async Task DoWalkAsync(IDicomDatasetWalker walker, Queue<DicomItem> items)
        {
            try
            {
                walker.OnBeginWalk();

                while (items.Count > 0)
                {
                    var item = items.Dequeue();

                    if (item is DicomElement)
                    {
                        await walker.OnElementAsync(item as DicomElement).ConfigureAwait(false);
                    }
                    else if (item is DicomFragmentSequence)
                    {
                        walker.OnBeginFragment(item as DicomFragmentSequence);
                    }
                    else if (item is DicomFragmentItem)
                    {
                        await walker.OnFragmentItemAsync((item as DicomFragmentItem).Buffer).ConfigureAwait(false);
                    }
                    else if (item is EndDicomFragment)
                    {
                        walker.OnEndFragment();
                    }
                    else if (item is DicomSequence)
                    {
                        walker.OnBeginSequence(item as DicomSequence);
                    }
                    else if (item is BeginDicomSequenceItem)
                    {
                        walker.OnBeginSequenceItem((item as BeginDicomSequenceItem).Dataset);
                    }
                    else if (item is EndDicomSequenceItem)
                    {
                        walker.OnEndSequenceItem();
                    }
                    else if (item is EndDicomSequence)
                    {
                        walker.OnEndSequence();
                    }
                }

                walker.OnEndWalk();
            }
            catch (Exception e)
            {
                try
                {
                    walker.OnEndWalk();
                    throw;
                }
                catch
                {
                    throw e;
                }
            }
        }
コード例 #11
0
        /// <summary>
        /// Perform an asynchronous "walk" across the DICOM dataset provided in the <see cref="DicomDatasetWalker"/> constructor.
        /// </summary>
        /// <param name="walker">Dataset walker implementation to be used for dataset traversal.</param>
        /// <returns>Awaitable <see cref="Task"/>.</returns>
        public Task WalkAsync(IDicomDatasetWalker walker)
        {
            var items = new Queue<DicomItem>();
            BuildWalkQueue(this._dataset, items);

            return DoWalkAsync(walker, items);
        }
コード例 #12
0
        /// <summary>
        /// Perform a synchronous "walk" across the DICOM dataset provided in the <see cref="DicomDatasetWalker"/> constructor.
        /// </summary>
        /// <param name="walker">Dataset walker implementation to be used for dataset traversal.</param>
        public void Walk(IDicomDatasetWalker walker)
        {
                var items = new Queue<DicomItem>();
                BuildWalkQueue(this._dataset, items);

                DoWalk(walker, items);
        }
コード例 #13
0
ファイル: DicomDatasetWalker.cs プロジェクト: GMZ/fo-dicom
 public void Walk(IDicomDatasetWalker walker)
 {
     EndWalk(BeginWalk(walker, null, null));
 }
コード例 #14
0
 public void Walk(IDicomDatasetWalker walker)
 {
     EndWalk(BeginWalk(walker, null, null));
 }