C# 为什么赢了';打印消息不是用我的C代码打印的吗?

C# 为什么赢了';打印消息不是用我的C代码打印的吗?,c#,for-loop,C#,For Loop,我正在尝试在循环运行之前将消息“printing…”打印到txtMessage.Text文本框,但在循环运行之前,它从未打印到文本框。知道为什么吗 else { txtMessage.Text = "Printing..."; for (int i = numberCopies; i != 0; i--) { int paper = Co

我正在尝试在循环运行之前将消息“printing…”打印到txtMessage.Text文本框,但在循环运行之前,它从未打印到文本框。知道为什么吗

else
            {
                txtMessage.Text = "Printing...";
                for (int i = numberCopies; i != 0; i--)
                {
                    int paper = Convert.ToInt32(lblPaperAmount.Text);
                    paper--;
                    if (paper == 480 || paper == 380 || paper == 400 || paper == 200)
                    {
                        MessageBox.Show("There is a paper Jam! Please remove the Jam and then hit the ok button to continue!", "Important Message", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

                    }
                    lblPaperAmount.Text = Convert.ToString(Convert.ToInt32(lblPaperAmount.Text) - 1);
                    lblTonerAmount.Text = Convert.ToString(Convert.ToInt32(lblTonerAmount.Text) - 1);
                    Thread.Sleep(1000);
                }
                txtMessage.Text = "Job is completed!";
            }

设置文本后,尝试添加刷新调用。有可能您进入循环的速度足够快,只有退出才能刷新

else
{
    txtMessage.Text = "Printing...";
    txtMessage.Refresh(); //force the control to redraw
    for (int i = numberCopies; i != 0; i--)
    {
        int paper = Convert.ToInt32(lblPaperAmount.Text);
        paper--;
        if (paper == 480 || paper == 380 || paper == 400 || paper == 200)
        {
            MessageBox.Show("There is a paper Jam! Please remove the Jam and then hit the ok button to continue!", "Important Message", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

        }
        lblPaperAmount.Text = Convert.ToString(Convert.ToInt32(lblPaperAmount.Text) - 1);
        lblTonerAmount.Text = Convert.ToString(Convert.ToInt32(lblTonerAmount.Text) - 1);
        Thread.Sleep(1000);
    }
    txtMessage.Text = "Job is completed!";
}

您的代码在单个线程中运行。您应该将文本设置为“打印…”,然后旋转一个新线程来执行循环卡纸


请查看问题和前3个答案。

Lol。您自己用“completed!”消息重写了它。@Jk要进一步扩展,无论您在哪里使用
txtMessage.Text=…
,您都应该将其更改为
txtMessage.Text+=…
,除非您只想显示新的内容message@JK. 是的,它的罚款覆盖后,为loop@Rob即使我将其添加到if和else语句之前,它仍然不会在for循环之前打印。Winform不会及时更新UI线程-这就是为什么作业已完成的原因。不过,您会注意到,在“打印”时,您的UI仍然会被冻结。点击打印并尝试移动或调整窗体大小。