示例#1
0
        internal override async Task GetStudySeriesImpAsync(GetStudySeriesRequest request, CancellationToken ct)
        {
            FileSysStudyImp fsStudy = request.Study as FileSysStudyImp;

            if (fsStudy == null)
            {
                throw new ApplicationException($"The {GetType()} implementation can receive study instances of {typeof(FileSysStudyImp)} only");
            }

            var createSeries = new ActionBlock <string>(async seriesDir =>
            {
                var series = await CreateFromSeriesDirAsync(seriesDir, (dicomFile) =>
                {
                    return(dicomFile.Dataset.CreateObject(() => new FileSysSeriesImp(seriesDir)));
                });

                if (series != null)
                {
                    if (series.NumberOfSeriesRelatedInstances < 1)
                    {
                        series.NumberOfSeriesRelatedInstances = Directory.EnumerateFiles(seriesDir).Count();
                    }

                    series.Study = request.Study;
                    request.RaiseSeriesGot(series);
                }
            }, new ExecutionDataflowBlockOptions {
                CancellationToken = ct, MaxDegreeOfParallelism = DataflowBlockOptions.Unbounded
            });


            foreach (var seriesDir in fsStudy.SeriesDirs)
            {
                await createSeries.SendAsync(seriesDir, ct);
            }

            createSeries.Complete();
            await createSeries.Completion;
        }
示例#2
0
        internal override async Task GetStudySeriesImpAsync(GetStudySeriesRequest request, CancellationToken ct)
        {
            var dicomRequest = DicomCFindRequest.CreateSeriesQuery(request.Study.StudyInstanceUid);

            dicomRequest.OnResponseReceived += (req, resp) =>
            {
                if (!ct.IsCancellationRequested && resp.Dataset != null)
                {
                    var series = resp.Dataset.CreateObject <Series>();

                    if (series == null)
                    {
                        _logger.Error("Series creation failed");
                    }
                    else
                    {
                        series.Study = request.Study;
                        request.RaiseSeriesGot(series);
                    }
                }
            };

            await FindAsync <Series>(dicomRequest, _settings, _getStudySeriesSemaphore, ct);
        }