C# Winforms 使用 Drawline 方法更新屏幕超慢

标签 c# winforms

我已经在网上浏览了这方面的内容,但没有找到我正在寻找的确切答案,或者我已经尝试了建议的内容,但它不起作用!

我遇到的问题是我有一个屏幕,它在一个矩阵中有大约 72 个复选框,我使用我存储在列表中的坐标的线连接在一起。

为了绘制线条,我在 OnPaint 的重写方法中使用 Drawline 方法来循环访问列表,如下所示:-

protected override void OnPaint(PaintEventArgs e)
    {
        Pen myPen = new Pen(System.Drawing.Color.Black);
        Graphics g = this.CreateGraphics();
        myPen.Width = 5;

       foreach(ConnectionLine cl in connectionLines)
       {
        g.DrawLine(myPen, cl.xStart, cl.yStart, cl.xStop, cl.yStop);
       }

        myPen.Dispose();
        g.Dispose();

    }

奇怪的是,它似乎不是花时间绘制的线条 - 现在是复选框,如果我删除线条功能,这些会在眨眼间刷新。

非常感谢任何想法。

谢谢,

戴夫

最佳答案

部分问题可能是每次绘制控件时都在重新创建 Graphics 对象。相反,您应该使用 PaintEventArgs 中提供的 e.Graphics 对象。您也可以尝试只使用一个 Pen 实例。

 private readonly Pen _myPen = new Pen(System.Drawing.Color.Black) {Width = 5};
 protected override void OnPaint(PaintEventArgs e)
 {
     foreach (var cl in connectionLines)
         e.Graphics.DrawLine(_myPen, cl.xStart, cl.yStart, cl.xStop, cl.yStop);
 }

关于C# Winforms 使用 Drawline 方法更新屏幕超慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688238/

相关文章:

c# - 在隐式转换期间对值进行钳位和舍入

.net - 在 VS2010 中调试时出现 UI 阻塞

c# - 从存储过程返回多个表

vb.net - 基本本地化(中性语言)

c# - 捕获所有 Windows 7 触摸事件,而不仅仅是在我的窗体具有焦点时捕获

c# - asp.net 使用 javascript 隐藏下拉列表中的特定项目

c# - 图片框 图片框

c# - 设置左上角标题单元格中的文本是一个数据 GridView

c# property setter body 没有声明类级属性变量

C# - 按字母顺序对列表框进行排序