2010-11-28 65 views
0

下午好。我有一个source program,它监视打印机的状态(开始打印,停止等)。下面是显示有关打印信息的代码:监控程序打印

 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),而不是在程序中设置。提前致谢。

回答

0

如果您将调用者写为这样的Action,并且使用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); 
}