首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打印预览性能

打印预览性能
EN

Stack Overflow用户
提问于 2014-10-01 21:34:55
回答 1查看 1K关注 0票数 1

我的问题很简单。我需要在多用户ERP环境中显示打印预览对话框。打印应该尽可能快,这一点不言而喻。然而,如果我使用下面的代码,它需要大约10分钟!预览显示并完全生成前的秒数。这不需要数据库访问或任何其他CPU密集型操作。

有没有办法或方法来提高这个性能呢?如果有必要的话,我也可以使用WPF。

我注意到,如果你生成预览,关闭它,然后快速地再次生成它,它的响应速度要快得多,大约一两秒。如果您再等待5秒左右,再次生成它,则需要大约10秒。我猜某种类型的缓存正在进行,但不知道实际发生了什么。

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PrintPerformanceTests
{
    public class PrintPreviewTest
    {
        private string printerName;
        private PrintPreviewDialog printPreviewDialog1;
        private PrintDocument printDocument1 = new PrintDocument();
        private Random random = new Random();

        public string PrinterName
        {
            get { return printerName; }
            set { printerName = value; }
        }

        public PrintPreviewDialog PrintPreviewDialog
        {
            get { return printPreviewDialog1; }
            set { printPreviewDialog1 = value; }
        }

        public PrintPreviewTest(string printerName, PrintPreviewDialog printPreviewDialog)
        {
            this.PrinterName = printerName;
            this.PrintPreviewDialog = printPreviewDialog;
            printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
        }

        public void GenerateRandomPrintPreview()
        {
            Cursor.Current = Cursors.WaitCursor;
            try
            {
                PrintPreviewDialog.Document = printDocument1;
                PrintPreviewDialog.ShowDialog();
            }
            catch (Exception exc)
            {
                Cursor.Current = Cursors.Default;
                MessageBox.Show(exc.ToString());
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }

        void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.Graphics.PageUnit = GraphicsUnit.Millimeter;
            using(Font f = new Font("Arial", 10f))
            {
                for (int i = 0; i < 20; i++)
                {
                    string txt = "Random string " + i.ToString();
                    e.Graphics.DrawString(txt, f, Brushes.Black, new PointF(random.Next(10, 200), random.Next(10,280)));
                }
            }

            e.HasMorePages = false;
        }
    }
}

用法:

代码语言:javascript
复制
        PrintPreviewTest pt = new PrintPreviewTest(tbPrinter.Text, printPreviewDialog);
        pt.GenerateRandomPrintPreview();
EN

回答 1

Stack Overflow用户

发布于 2014-12-23 20:51:10

根据我的经验,这种启动延迟与打印机参数的初始化有关。当您设置打印机名称(特别是网络打印机名称)并创建打印预览对话框时,它首先连接到指定的打印机并检查其设置(纸张大小等)。这需要很多时间。解决此问题的唯一方法(IMHO)是创建自己的打印预览对话框,该对话框在单独的线程中初始化打印机设置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26142699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档