public static IAsyncResult BeginRead( this DicomReader @this, IByteSource source, IDicomReaderObserver observer, Func <ParseState, bool> stop, AsyncCallback callback, object state) { return(AsyncFactory.ToBegin(@this.ReadAsync(source, observer, stop), callback, state)); }
private static async Task <Tuple <DicomReaderResult, DicomFileFormat, DicomTransferSyntax> > DoParseAsync( IByteSource source, IDicomReaderObserver fileMetasetInfoObserver, IDicomReaderObserver datasetObserver, Func <ParseState, bool> stop, DicomTransferSyntax syntax, DicomFileFormat fileFormat) { string code = null, uid = null; var obs = new DicomReaderCallbackObserver(); if (fileFormat != DicomFileFormat.DICOM3) { obs.Add( DicomTag.RecognitionCodeRETIRED, (sender, ea) => { try { code = Encoding.UTF8.GetString(ea.Data.Data, 0, ea.Data.Data.Length); } catch { } }); } obs.Add( DicomTag.TransferSyntaxUID, (sender, ea) => { try { uid = Encoding.UTF8.GetString(ea.Data.Data, 0, ea.Data.Data.Length); } catch { } }); var reader = new DicomReader { IsExplicitVR = syntax.IsExplicitVR, IsDeflated = false }; DicomReaderResult result; if (fileFormat == DicomFileFormat.DICOM3NoFileMetaInfo) { result = await reader.ReadAsync(source, new DicomReaderMultiObserver(obs, datasetObserver), stop).ConfigureAwait(false); UpdateFileFormatAndSyntax(code, uid, ref fileFormat, ref syntax); } else { if ( await reader.ReadAsync( source, new DicomReaderMultiObserver(obs, fileMetasetInfoObserver), _FileMetaInfoStopCriterion).ConfigureAwait(false) != DicomReaderResult.Stopped) { throw new DicomReaderException("DICOM File Meta Info ended prematurely"); } UpdateFileFormatAndSyntax(code, uid, ref fileFormat, ref syntax); // rewind to last marker (start of previous tag)... ugly because // it requires knowledge of how the parser is implemented source.Rewind(); source.Endian = syntax.Endian; reader.IsExplicitVR = syntax.IsExplicitVR; reader.IsDeflated = syntax.IsDeflate; result = await reader.ReadAsync(source, datasetObserver, stop).ConfigureAwait(false); } return(Tuple.Create(result, fileFormat, syntax)); }
private static async Task<Tuple<DicomReaderResult, DicomFileFormat, DicomTransferSyntax>> DoParseAsync( IByteSource source, IDicomReaderObserver fileMetasetInfoObserver, IDicomReaderObserver datasetObserver, Func<ParseState, bool> stop, DicomTransferSyntax syntax, DicomFileFormat fileFormat) { string code = null, uid = null; var obs = new DicomReaderCallbackObserver(); if (fileFormat != DicomFileFormat.DICOM3) { obs.Add( DicomTag.RecognitionCodeRETIRED, (sender, ea) => { try { code = Encoding.UTF8.GetString(ea.Data.Data, 0, ea.Data.Data.Length); } catch { } }); } obs.Add( DicomTag.TransferSyntaxUID, (sender, ea) => { try { uid = Encoding.UTF8.GetString(ea.Data.Data, 0, ea.Data.Data.Length); } catch { } }); var reader = new DicomReader { IsExplicitVR = syntax.IsExplicitVR, IsDeflated = false }; DicomReaderResult result; if (fileFormat == DicomFileFormat.DICOM3NoFileMetaInfo) { result = await reader.ReadAsync(source, new DicomReaderMultiObserver(obs, datasetObserver), stop).ConfigureAwait(false); UpdateFileFormatAndSyntax(code, uid, ref fileFormat, ref syntax); } else { if ( await reader.ReadAsync( source, new DicomReaderMultiObserver(obs, fileMetasetInfoObserver), FileMetaInfoStopCriterion).ConfigureAwait(false) != DicomReaderResult.Stopped) { throw new DicomReaderException("DICOM File Meta Info ended prematurely"); } UpdateFileFormatAndSyntax(code, uid, ref fileFormat, ref syntax); // rewind to last marker (start of previous tag)... ugly because // it requires knowledge of how the parser is implemented source.Rewind(); source.Endian = syntax.Endian; reader.IsExplicitVR = syntax.IsExplicitVR; reader.IsDeflated = syntax.IsDeflate; result = await reader.ReadAsync(source, datasetObserver, stop).ConfigureAwait(false); } return Tuple.Create(result, fileFormat, syntax); }