表格在活动结束后没有回应

时间:2018-03-08 02:54:04

标签: c# winforms

我遇到了这个问题,我的表单会在检测到事件后显示但没有响应。

buttons and text won't show

这是我的代码,用于监听事件及其在检测到事件后的作用。

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;),表单根本不会显示。 有没有人遇到过这个?

1 个答案:

答案 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();
    });

}