Leadtools.Dicom Namespace > DicomDataSet Class > LoadAsync Method : LoadAsync(String,DicomDataSetLoadFlags) Method |
public IAsyncOperation<bool> LoadAsync( string path, DicomDataSetLoadFlags flags )
'Declaration Public Overloads Function LoadAsync( _ ByVal path As String, _ ByVal flags As DicomDataSetLoadFlags _ ) As IAsyncOperation(Of Boolean)
'Usage Dim instance As DicomDataSet Dim path As String Dim flags As DicomDataSetLoadFlags Dim value As IAsyncOperation(Of Boolean) value = instance.LoadAsync(path, flags)
public IAsyncOperation<bool> LoadAsync( string path, DicomDataSetLoadFlags flags )
public: IAsyncOperation<bool>^ LoadAsync( String^ path, DicomDataSetLoadFlags flags )
If you do not know any characteristics of the file, set flags to DicomDataSetLoadFlags.None and LEADTOOLS will automatically determine all the file characteristics and load the file accordingly.
If DicomDataSetLoadFlags.LoadAndClose is not included in flags, the file will remain open until the object is destructed, or one of the following methods is called: Reset, Initialize(DicomClassType,DicomDataSetInitializeType), or Load(String,DicomDataSetLoadFlags) (again). If LoadAndClose is used for large images it might slow performance; however, the file handle will be released. If set to None, large images will load quickly, and image traversal can begin immediately.
using Leadtools.Dicom.Constants; using Leadtools; using Leadtools.Dicom; public async Task LoadEnumerateSample() { //Make sure to initialize the DICOM engine, this needs to be done only once //In the whole application DicomEngine.Startup(); using (DicomDataSet ds = new DicomDataSet()) { //Load DICOM File string dicomFilePath = @"Assets\IMAGE3.dcm"; StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(dicomFilePath); bool success = await ds.LoadAsync(LeadStreamFactory.Create(loadFile),DicomDataSetLoadFlags.None); Debug.Assert(success); //Insert patient name element, if it doesn't already exist DicomElement element = ds.FindFirstElement(null, DicomTagConstants.PatientName, false); if (element == null) { element = ds.InsertElement(null, false, DicomTagConstants.PatientName, DicomVRType.PN, false, 0); } //The dataset should include the patient name element or an error occurred element = ds.FindLastElement(null, DicomTagConstants.PatientName, false); Debug.Assert(element != null); //There can be only one patient element in the root level element = ds.FindPreviousElement(null, false); Debug.Assert(element == null); element = ds.FindNextElement(null, false); Debug.Assert(element == null); element = ds.FindFirstElement(null, DicomTagConstants.PatientName, false); //Since the patient name element is in the root level, //GetRootElement will return the same element. DicomElement element1 = ds.GetRootElement(element); Debug.Assert((element1.Tag == element.Tag), "GetRootElement should return same element"); //Since the patient name element has no parent then GetParentElement will return null element1 = ds.GetParentElement(element); Debug.Assert(element1 == null, "GetParentElement should return null"); //Since the patient name element has no children then GetChildElement will return null element1 = ds.GetChildElement(element, false); Debug.Assert(element1 == null, "GetChildElement should return null"); element1 = ds.GetFirstElement(element, false, false); Debug.Assert(element1 != null, "GetFirstElement Can't return null in this case"); element1 = ds.GetLastElement(element, false, false); Debug.Assert(element1 != null, "GetLastElement Can't return null in this case"); element1 = ds.GetPreviousElement(element, false, true); DicomElement element2 = ds.GetNextElement(element, false, true); Debug.Assert(ds.GetElementLevel(element) == 0); Debug.Assert(ds.ExistsElement(element)); Debug.Assert(ds.IsVolatileElement(element) == false); //Patient Name is not the only element in this level Debug.Assert((element1 != null) && (element2 != null)); //Delete the patient name element ds.DeleteElement(element); } DicomEngine.Shutdown(); }