C# Ghostgum/Ghostscript 打印延迟 - 状态假脱机

C# Ghostgum/Ghostscript printing delay - status spool

我正在使用需要 Ghostscript 的 Ghostgum (GSView) 来静默打印我的文档。

静默打印没问题,但是打印各种文档(pdf 文档)会一直处于某种队列中,永远不会打印。被打印的人(总是第一个文档)会进入某种状态,称为"spool" 并拒绝其他人打印。

它是葡萄牙语,但您可以得出结论。

for (int i = 0; i < listOfDocs.Count; i++)
{
    string file = listOfDocs[i].ToString();

    client.DownloadFileCompleted += new AsyncCompletedEventHandler (file_DownloadFileCompleted);
    client.DownloadFileAsync(new System.Uri(file), __PATH_TO_SAVE + Path.GetFileName(file), Path.GetFileName(file));
}

下载完成后抓取文件并将其发送到 GSView 进行静默打印。

private void file_DownloadFileCompleted(Object sender, System.ComponentModel.AsyncCompletedEventArgs args)
{
    string filename = args.UserState.ToString();

    using (Process printJob = new Process())
    {
        try
        {
            printJob.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            printJob.StartInfo.FileName = this.__GSVIEW;
            printJob.StartInfo.Arguments = string.Format("-noquery -portrait -printer \"{0}\" \"{1}\"", this.__PRINTER, this.__PATH_TO_SAVE + filename);
            printJob.Start();
            printJob.WaitForExit();
        }
        catch (Exception ex)
        {
            stop("Error: " + ex.Message);
        }
        finally
        {
           File.Delete(this.__PATH_TO_SAVE + filename);
        }
    }
 }

我该怎么做才能避免这个问题?

在初始的 for 循环中,DownloadFileCompleted 事件被连接到每个文档。该事件只能在 for 循环之前连接一次。我怀疑只有第一个文档被打印并保留在假脱机中的原因是因为 DownloadFileCompleted 事件针对已下载的同一个文件被多次触发。

这应该可以解决事件,这可能会解决假脱机问题:

// only declare the event handler once, not for every file downloaded
client.DownloadFileCompleted += new AsyncCompletedEventHandler (file_DownloadFileCompleted);

for (int i = 0; i < listOfDocs.Count; i++)
{
    string file = listOfDocs[i].ToString();

    // remove from the for loop
    // client.DownloadFileCompleted += new AsyncCompletedEventHandler (file_DownloadFileCompleted);
    client.DownloadFileAsync(new System.Uri(file), __PATH_TO_SAVE + Path.GetFileName(file), Path.GetFileName(file));
}