我有一个自定义列表视图,我想在OnDrawSubItem函数中调试一些消息框。我预计会有一些GUI冻结试图重新绘制该项目。奇怪的是当我点击子项目(在MessageBox之后)时,CPU达到100%。有人可以解释一下这个循环已经落下了吗?
class ListViewEx : ListView
{
public ListViewEx()
{
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true);
}
protected override void OnDrawColumnHeader(DrawListViewColumnHeaderEventArgs e)
{
e.DrawDefault = true;
}
protected override void OnDrawSubItem(DrawListViewSubItemEventArgs e)
{
MessageBox.Show("test");
e.DrawDefault = true;
}
}
修改
如果我对按钮的绘制事件做同样的事情我没有高CPU(只是一些重复的MessageBox)
private void btnTest_Paint(object sender, PaintEventArgs e)
{
MessageBox.Show("test");
}
我知道在paint事件中显示mbox是不对的。我很好奇我的两个例子中的不同行为。
答案 0 :(得分:0)
就像Alex's comment建议的那样,在使用UI代码时,不应该使用消息框作为调试辅助工具。它们会导致各种问题并掩盖您尝试调试的行为。
更好的解决方案包括以下一种或多种组合: