/// <summary> /// Convenience method for creating a C-FIND image query. /// </summary> /// <param name="studyInstanceUid">Study instance UID.</param> /// <param name="seriesInstanceUid">Series instance UID.</param> /// <param name="modality">Modality.</param> /// <returns>C-FIND image query object.</returns> public static DicomCFindRequest CreateImageQuery( string studyInstanceUid, string seriesInstanceUid, string modality = null) { DicomCFindRequest dimse = DicomCFindRequest.CreateImageQuery(studyInstanceUid, seriesInstanceUid, modality); return(dimse); }
private async Task <IEnumerable <ImageDesc> > GetImagesDescAsync(Series series, DicomSearchServiceSettings settings, CancellationToken ct) { var uid = series.SeriesInstanceUid; var max = settings.SeriesImageSettings.SeriesImageTakeImages; var result = new List <ImageDesc>(); if (ct.IsCancellationRequested) { return(result); } var request = DicomCFindRequest.CreateImageQuery(series.StudyInstanceUid, series.SeriesInstanceUid); CancellationTokenSource tooManySeriesCts = null; var cancellationLock = new object(); request.OnResponseReceived += (req, resp) => { if (ct.IsCancellationRequested || resp.Dataset == null) { return; } if (result.Count >= settings.SeriesImageSettings.SeriesImageTakeImages) { lock (cancellationLock) { if (!tooManySeriesCts.IsCancellationRequested) { tooManySeriesCts.Cancel(); } } if (tooManySeriesCts.IsCancellationRequested) { _logger.Debug("Cancelled Image query for series {Uid} after {Max}", uid, max); } return; } var imageDesc = resp.Dataset.CreateObject <ImageDesc>(); if (imageDesc == null) { _logger.Error("ImageDesc creation failed"); return; } lock (cancellationLock) { result.Add(imageDesc); } _logger.Debug("Got imageDesc for series {Uid} on image {ImageUid}. Results: {Count}", uid, imageDesc.SopInstanceUid, result.Count); }; using (tooManySeriesCts = new CancellationTokenSource()) { using (CancellationTokenSource linkedCts = CancellationTokenSource.CreateLinkedTokenSource(ct, tooManySeriesCts.Token)) { _logger.Debug("Getting images desc for series {SeriesInstanceUid}", series.SeriesInstanceUid); await DicomSearchService.FindAsync <ImageDesc>(request, settings, null, linkedCts.Token); return(result); } } }