示例代码说明:

    private void button2_Click(object sender, EventArgs e)
    {
        const int numLines = 3000;

        StringBuilder sb = new StringBuilder();
        for(int i=0; i < numLines; i++)
        {
            sb.AppendFormat("Hello world {0}\r\n", i);
        }

        MessageBox.Show(this, sb.ToString(), "Error");
    }


现在,我意识到尝试在MessageBox中显示太多行可能不是一个好主意。但是我对numLines为“大”时的预期行为感到好奇。例如在我的Windows 10框上,如果numLines为3000,则消息框根本不会显示,您必须从任务栏中终止该程序。谁能对此有所启发?

编辑:感谢所有答复。该行为似乎相当随机。

例如如果numLines = 2175,则消息框显示为ok。
如果numLines = 2176,则不会出现消息框,并且程序将变得无响应。按下ALT-F4键可使程序再次响应(好像您只是关闭了一个看不见的模式对话框)。
如果numLines = 4208,则在屏幕底部可以看到一个仅带有标题“ Error”(没有正文)的消息框,如下所示:

c# - MessageBox.Show有很多行的行为-LMLPHP

最佳答案

MessageBox使用一个非常疯狂的系统来找到适合屏幕大小的最佳尺寸。大量的行导致它变得难以计算和尝试渲染。

10-07 22:21