2010-11-28 8 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

呼び出し元をこのようなアクションとして記述し、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); 
}