示例#1
0
        private void DoPrint(IBackgroundTaskContext context)
        {
            try
            {
                if (_selectPresentationsInformations == null || _selectPresentationsInformations.Count == 0)
                {
                    return;
                }
                Thread.Sleep(20);
                BackgroundTaskReportStatus(context, "Dicom打印开始", 0);
                Thread.Sleep(10);
                BackgroundTaskReportStatus(context, "开始处理图像...", 0);
                Thread.Sleep(10);
                //UISynchronizationContext.Send(DoImageProcess, null);
                DoImageProcess(null);
                if (_selectPresentationsInformations.Count == 0)
                {
                    BackgroundTaskReportStatus(context, "处理图像处理结果为0", 0);
                    return;
                }
                BackgroundTaskReportStatus(context, "开始向打印机发送图像", 0);
                Thread.Sleep(10);
                PrintScu scu = new PrintScu();
                DicomPrintProgressUpdate progressUpdate = new DicomPrintProgressUpdate();
                progressUpdate.dicomPrintManager = this;
                progressUpdate.printScu          = scu;
                progressUpdate.Task  = context;
                scu.ProgressUpdated += progressUpdate.Update;
                _dicomPrintSession   = new DicomPrintSession(DicomPrinter, new SelectPresentationsInformationsCollection(_selectPresentationsInformations));
                PrintScu.FilmSession filmSession = DicomPrintSession.GetFilmSession(_dicomPrintSession.SelectPresentationsCollection, _dicomPrintSession.DicomPrinter.Config);
                DicomState           dicomState  = scu.Print("MacroAETile", _dicomPrintSession.DicomPrinter.AETitle, _dicomPrintSession.DicomPrinter.Host, _dicomPrintSession.DicomPrinter.Port, filmSession);
                scu.Join();
                if (dicomState == DicomState.Success)
                {
                    //UpDicomPrintStatus(context);
                    if (_dicomPrintComponent != null)
                    {
                        UISynchronizationContext.Send(_dicomPrintComponent.PrintedDeleteImage, this);
                    }
                }
            }
            catch (Exception e)
            {
                Platform.Log(LogLevel.Debug, e);
                BackgroundTaskReportStatus(context, e.Message, 100);
            }

            if (_studyInstanceUid != null)
            {
                _studyInstanceUid.Clear();
                _studyInstanceUid = null;
            }
            GC.Collect();
        }
示例#2
0
        internal static PrintScu.FilmSession GetFilmSession(SelectPresentationsInformationsCollection selects, DicomPrinter.Configuration config)
        {
            FilmBoxConfig fileBoxConfig = new FilmBoxConfig
            {
                config = config
            };

            List <PrintScu.IPrintItem> printItems = new List <PrintScu.IPrintItem>();

            using (IEnumerator <ISelectPresentationsInformation> enumerator = selects.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    ISelectPresentationsInformation presentationsInformation = enumerator.Current;
                    IImageSopProvider imageSopProvider = (IImageSopProvider)presentationsInformation.Image;
                    if (imageSopProvider != null)
                    {
                        printItems.Add(new DicomPrintItem(imageSopProvider.ImageSop));
                    }
                }
            }

            PrintScu.FilmSession session = new PrintScu.FilmSession(printItems, new PrintScu.CreateFilmBoxDelegate(fileBoxConfig.GetFilmBox));
            if (fileBoxConfig.config.Session.FilmDestination != FilmDestination.None)
            {
                session.FilmDestination = fileBoxConfig.config.Session.FilmDestination;
            }

            if (fileBoxConfig.config.Session.PrintPriority != PrintPriority.None)
            {
                session.PrintPriority = fileBoxConfig.config.Session.PrintPriority;
            }

            if (fileBoxConfig.config.Session.MediumType != MediumType.None)
            {
                session.MediumType = fileBoxConfig.config.Session.MediumType;
            }
            session.NumberOfCopies = fileBoxConfig.config.Session.NumberOfCopies;

            return(session);
        }