MessageBox内部绘制事件高CPU

时间:2013-07-31 08:35:14

标签: .net listview

我有一个自定义列表视图,我想在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是不对的。我很好奇我的两个例子中的不同行为。

1 个答案:

答案 0 :(得分:0)

就像Alex's comment建议的那样,在使用UI代码时,不应该使用消息框作为调试辅助工具。它们会导致各种问题并掩盖您尝试调试的行为。

更好的解决方案包括以下一种或多种组合: