C# 监控程序打印

C# 监控程序打印,c#,printing,C#,Printing,下午好。我有一个监控打印机状态(开始打印、停止等)的程序。以下是显示打印信息的代码: MethodInvoker invoker = () => { lbSpoolChanges.Items.Add(e.JobID + " - " + e.JobName + " - " + e.JobStatus); }; if (lbSpoolChanges.InvokeRequired) {

下午好。我有一个监控打印机状态(开始打印、停止等)的程序。以下是显示打印信息的代码:

        MethodInvoker invoker = () =>
        {
            lbSpoolChanges.Items.Add(e.JobID + " - " + e.JobName + " - " + e.JobStatus);
        };
        if (lbSpoolChanges.InvokeRequired)
        {
            Invoke(invoker);
        }
        else
        {
            invoker();
        }`
您也可以调用属性e.JobInfo.NumberOfPagesPrinted,该行将是一个

lbSpoolChanges.Items.Add(e.JobID + " - " + e.JobName + " - " + e.JobStatus + " - " + e.JobInfo.NumberOfPagesPrinted);

但在调试错误中,弹出“调用线程无法访问此对象,因为此对象的所有者是另一个线程…”告诉我要在何处调用此属性。资料来源包括在内。有人能告诉我们如何自动控制所有打印机(如4),而不是设置在程序中。提前感谢。

如果您将调用程序编写为这样的操作,并使用BeginInvoke传递委托参数,是否有效

Action<string> invoker = (x) =>
{
    lbSpoolChanges.Items.Add(x);
};
if (this.InvokeRequired)
{
    this.BeginInvoke(invoker, e.JobID + " - " + e.JobName + " - " + e.JobStatus);
}
else
{
    invoker(e.JobID + " - " + e.JobName + " - " + e.JobStatus);
}
Action调用程序=(x)=>
{
增加(x)项;
};
if(this.invokererequired)
{
this.BeginInvoke(调用程序,e.JobID+“-”+e.JobName+“-”+e.JobStatus);
}
其他的
{
调用程序(e.JobID+“-”+e.JobName+“-”+e.JobStatus);
}