【VB.NET开启双缓冲,解决listview假死和闪屏】

找了好久没有vb.net版本的开启双缓冲的实例,,假期有时间搞一下

找了好久没有vb.net版本的开启双缓冲的实例,,假期有时间搞一下。
代码:

代码片段

在这里插入代码片

'双缓冲片段

Private Sub DoubleBuffer()
PrepareListView(dbListView1)
Dim thread1 As New Thread(CType(Sub()
                                        For i As Integer = 0 To count - 1
                                            dbListView1.Invoke(CType(Sub()
                                                                         dbListView1.Items.Add(New ListViewItem(New String() {i.ToString(), String.Format("This is No.{0} item", i.ToString())}))
                                                                     End Sub, MethodInvoker))
                                        Next
                                    End Sub, ThreadStart))
    thread1.Start()
End Sub
Friend Class NativeInterop
Public Const WM_PRINTCLIENT As Integer = &H318
Public Const PRF_CLIENT As Integer = &H4
End Class

'DBListView

Public Class DBListView 
Inherits ListView
 Public Sub New()
 '开启被保护的属性
    SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.AllPaintingInWmPaint, True)
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
    If GetStyle(ControlStyles.UserPaint) Then
        Dim m As Message = New Message()
        m.HWnd = Handle
        m.Msg = NativeInterop.WM_PRINTCLIENT
        m.WParam = e.Graphics.GetHdc()
        m.LParam = CType(NativeInterop.PRF_CLIENT, IntPtr)
        DefWndProc(m)
        e.Graphics.ReleaseHdc(m.WParam)
    End If
    MyBase.OnPaint(e)
End Sub
End Class

最后附上代码:
上传资料审核中
[添加链接描述]源码下载链接
https://download.youkuaiyun.com/download/sinat_35472054/85072766?spm=1001.2014.3001.5501

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值