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(); }
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); }