2016-06-09 72 views
2

示例代码MessageBox.Show行为来说明:有很多线路

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,只有标题为“错误”(无正文)一个消息框,可以在屏幕这样的底部可以看出:

enter image description here

+0

2175是我所要做的最多行数,不管输入字符串。 – Inisheer

+1

@Inisheer - 谢谢。我也是。如果我使用2176,则没有窗口显示,并且该应用程序似乎表现得好像屏幕上有一个不可见的模式对话框(无响应)。 –

回答

1

MessageBox中使用了真的疯了系统查找这是适合屏幕的最佳尺寸。大量的线条导致它卡住计算和尝试渲染。