我正在使用需要Ghostscript的Ghostgum(GSView)才能默默地打印我的文档。
静音打印没问题,但是打印各种文档(pdf文档)会保留在某种永久持续且不打印的队列中...打印的人(总是第一个文档)会进入某种称为“假脱机”的状态“并否认其他人的印刷。
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);
}
}
}
我可以做些什么来避免这个问题?
答案 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));
}