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));
}
我正在使用需要 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));
}