Beispiel #1
0
 protected virtual void OnMoveComplete(MoveCompleteEventArgs e)
 {
     if (MoveComplete != null)
     {
         MoveComplete(this, e);
     }
 }
Beispiel #2
0
        /// <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();
            }
        }