我在面板中只有2,000个32wx32h PictureBox,网格状。我认为这是问题,所以我把它设置为1,250 PictureBoxes(50w25h),我遇到了同样的问题。
这不是实时事件循环。这只是一堆控制并排等待事件。
我做的是向下滚动向上..工作正常。左右......工作正常。经过一段时间滚动1-2分钟后,它会冻结整个应用程序。
我的面板的AutoScroll设置为True。我自己的代码都没有在滚动条上运行。它所做的就是滚动十亿个PictureBoxes。
我注意到禁用滚动条不会在以后冻结应用程序,所以我认为这是一个滚动条问题。
调试器没有提供任何信息。
Process Memory表示正在使用17.9mb。
使用以下步骤似乎始终可以重现:向下滚动垂直条,例如向下滚动一半,然后松开鼠标按钮,向上移动到右上方的红色“X”。窗口,它冻结了。
其他时候它只是将垂直和水平滚动条移动30秒到2分钟,它会随机冻结。
新注意:在冻结期间,我注意到大约5-10秒后滚动条可以再次移动。然后很快回到短暂的冻结并重复。
在加载时,这用于初始化网格:
// Initialize a blank map
for (int row = 0; row < m_mapInfo.Rows; row++)
{
for (int col = 0; col < m_mapInfo.Columns; col++)
{
PictureBox pb = new PictureBox();
pb.Size = size;
Point loc = new Point(m_mapInfo.TileWidth * col, m_mapInfo.TileHeight * row);
Rectangle srcRect = new Rectangle(loc, size);
pb.Location = loc;
pb.Tag = -1;
pb.Name = String.Format("Col={0:00}-Row={1:00}", col, row);
pb.BackColor = Color.Gray;
pb.MouseDown += pbMap_MouseDown;
pb.MouseUp += pbMap_MouseUp;
pnlMap.Controls.Add(pb);
}
}
答案 0 :(得分:0)
在Visual Studio 2017的调试模式下,挂起似乎是一个错误。我的解决方案是最大化窗口和面板而不使用滚动条。如果我最初没有使用滚动条我的窗口最大化,它可以很好地工作,具有出色的性能。如果我将窗口缩小到原始大小并使用滚动条,它会在30秒 - 2分钟内挂起应用程序。这两种情况都使用相同数量的PictureBox进行了测试。
答案 1 :(得分:0)
问题出在AutoScroll上。我也在2016年的一个音乐播放器项目中体验过这一点。我发现摆脱这个问题的最好方法是: