public class PrintJobChecker
{
private DispatcherTimer _timer;
private PrintQueue _printer;
private Action<string> _checkingAction;
public DateTime? StartPrintTime { get; set; }
private int _interval = 100;
public int TimerInterval
{
get { return _interval; }
set
{
_interval = value;
_timer.Interval = TimeSpan.FromMilliseconds(value);
}
}
public PrintJobChecker(PrintQueue printer, Action<string> checkingAction)
{
if (printer == null || checkingAction == null)
{
return;
}
_printer = printer;
_checkingAction = checkingAction;
_timer = new DispatcherTimer
{
Interval = TimeSpan.FromMilliseconds(TimerInterval),
};
_timer.Tick += CheckJobStatus;
PrintingStatus = "正在打印";
PrintErrorStatus = "打印出错";
PrintOfflineStatus = "请连接打印机";
PrintWaittingStatus = "请放入相应的表单至打印机";
PrintUnknownStatus = "未知错误";
}
public void Start()
{
_timer.Start();
}
public void Stop()
{
_timer.Stop();
}
private void CheckJobStatus(object sender, EventArgs e)
{
if (_printer == null)
{
return;
}
var job = _printer.GetLastJob();
if (job == null)
{
if (!StartPrintTime.HasValue)
{
StartPrintTime = DateTime.Now;
}
_checkingAction(PrintingStatus);
}
else
{
var statusText = GetJobStatus(job);
_checkingAction(statusText);
}
}
public string PrintingStatus { get; set; }
public string PrintErrorStatus { get; set; }
public string PrintOfflineStatus { get; set; }
public string PrintWaittingStatus { get; set; }
public string PrintUnknownStatus { get; set; }
private string GetJobStatus(PrintSystemJobInfo job)
{
if (job == null) return null;
if (((job.JobStatus & PrintJobStatus.Completed) == PrintJobStatus.Completed)
||
((job.JobStatus & PrintJobStatus.Printed) == PrintJobStatus.Printed))
{
StartPrintTime = DateTime.Now;
return PrintingStatus;
}
if ((job.JobStatus & PrintJobStatus.Error) == PrintJobStatus.Error)
{
_timer.Stop();
return PrintErrorStatus;
}
if ((job.JobStatus & PrintJobStatus.Offline) == PrintJobStatus.Offline
||
job.JobStatus == PrintJobStatus.None)
{
return PrintOfflineStatus;
}
if ((job.JobStatus & PrintJobStatus.Printing) == PrintJobStatus.Printing)
{
if (job.TimeSinceStartedPrinting > 0)
{
return PrintingStatus;
}
else
{
return PrintWaittingStatus;
}
}
return PrintUnknownStatus;
}
}
最新评论