/// <summary> /// moveservice方法的处理函数 /// </summary> public void MoveSeriesProcess() { DicomExceptionCode ret = DicomExceptionCode.Success; using (CFindSCP scp = new CFindSCP()) { dsCollection.Clear(); scp.cfind = this; scp.dsCollection = dsCollection; scp.ImplementationClass = ImplementationClass; scp.ImplementationVersionName = ImplementationVersionName; ret = scp.Listen(clientPort, 1, ipType); if (ret != DicomExceptionCode.Success) { InvokeStatusEvent(StatusType.Error, ret); Terminate(); return; } using (DicomDataSet ds = new DicomDataSet()) { ds.Initialize(DicomClassType.Undefined, DicomDataSetInitializeType.ExplicitVRLittleEndian); Utils.SetTag(ds, DemoDicomTags.QueryRetrieveLevel, "SERIES"); Utils.SetTag(ds, DemoDicomTags.StudyInstanceUID, studyInstance); Utils.SetTag(ds, DemoDicomTags.SeriesInstanceUID, seriesInstance); //Utils.SetTag(ds, DemoDicomTags.PatientID, patientID); byte pid; pid = Association.FindAbstract(DicomUidType.StudyRootQueryMove); if (pid == 0) { pid = Association.FindAbstract(DicomUidType.PatientRootQueryMove); Utils.SetTag(ds, DemoDicomTags.PatientID, patientID); } InvokeStatusEvent(StatusType.SendCMoveRequest, DicomExceptionCode.Success); try { string UidType = Association.GetAbstract(pid); SendCMoveRequest(pid, MessageId++, UidType, DicomCommandPriorityType.Medium, Association.Calling, ds); } catch (DicomException de) { InvokeStatusEvent(StatusType.Error, de.Code); SendReleaseRequest(); if (!Wait()) // Allows Messages to occur { InvokeStatusEvent(StatusType.Timeout, DicomExceptionCode.Success); Terminate(); } scp.Close(); return; } } if (!Wait()) { // // Connection timed out // scp.Close(); InvokeStatusEvent(StatusType.Timeout, DicomExceptionCode.Success); Terminate(); } InvokeStatusEvent(StatusType.SendReleaseRequest, DicomExceptionCode.Success); SendReleaseRequest(); if (!Wait()) { scp.Close(); InvokeStatusEvent(StatusType.Timeout, DicomExceptionCode.Success); Terminate(); } scp.Close(); MoveCompleteEventArgs e = new MoveCompleteEventArgs(); e._Datasets = dsCollection; OnMoveComplete(e); foreach (DicomDataSet resultDs in dsCollection) { resultDs.Dispose(); } dsCollection.Clear(); } }
public CFindClient(CFindSCP server) : base(null, DicomNetSecurityeMode.None) { this.server = server; }