我遇到了这个问题,我的表单会在检测到事件后显示但没有响应。
这是我的代码,用于监听事件及其在检测到事件后的作用。
private void checkPrintJobs()
{
EventLogQuery logQuery = new EventLogQuery("Microsoft-Windows-PrintService/Operational", PathType.LogName, "*[System[(EventID = 800)]]");
EventLogWatcher logWatcher = new EventLogWatcher(logQuery);
logWatcher.EventRecordWritten += new EventHandler<EventRecordWrittenEventArgs>(EventWritten);
logWatcher.Enabled = true;
}
private void EventWritten(Object obj, EventRecordWrittenEventArgs arg)
{
PrintQueue myPrintQueue = new PrintQueue(ps, printer, PrintSystemDesiredAccess.AdministratePrinter);
myPrintQueue.Pause();
foreach (var job in myPrintQueue.GetPrintJobInfoCollection())
{
job.Pause();
}
MessageBox.Show("WAIT!");
frmPromptPIN frm = new frmPromptPIN(printer);
frm.Show();
}
如果我删除了MessageBox.Show(&#34; WAIT!&#34;),表单根本不会显示。 有没有人遇到过这个?
答案 0 :(得分:0)
正如TnTinMn所说,你必须在UI线程中调用你的UI代码,例如。
private void EventWritten(Object obj, EventRecordWrittenEventArgs arg)
{
PrintQueue myPrintQueue = new PrintQueue(ps, printer, PrintSystemDesiredAccess.AdministratePrinter);
myPrintQueue.Pause();
foreach (var job in myPrintQueue.GetPrintJobInfoCollection())
{
job.Pause();
}
Invoke((MethodInvoker) delegate {
frmPromptPIN frm = new frmPromptPIN(printer);
frm.Show();
});
}