2010-11-28 70 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); 
}