示例代码说明:
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”(没有正文)的消息框,如下所示:
最佳答案
MessageBox使用一个非常疯狂的系统来找到适合屏幕大小的最佳尺寸。大量的行导致它变得难以计算和尝试渲染。