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

时间:2015-10-19 17:25:58

标签: c# ghostscript

我正在使用需要Ghostscript的Ghostgum(GSView)才能默默地打印我的文档。

静音打印没问题,但是打印各种文档(pdf文档)会保留在某种永久持续且不打印的队列中...打印的人(总是第一个文档)会进入某种称为“假脱机”的状态“并否认其他人的印刷。

这是葡萄牙语,但你可以得出结论。 enter image description here

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

我可以做些什么来避免这个问题?

1 个答案:

答案 0 :(得分:0)

在初始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));
}