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;
}
}
最新评论