有一對夫婦的事情,你可以嘗試:
首先,嘗試在DataGridView的雙緩衝屬性設置爲true。這是實際DataGridView實例上的屬性,而不是表單。這是一個受保護的屬性,因此您必須對網格進行子類別設置。
class CustomDataGridView: DataGridView
{
public CustomDataGridView()
{
DoubleBuffered = true;
}
}
我已經看到了很多的小戰平更新需要對某些視頻卡DataGridView的一段時間,並且這可以通過批處理起來它們是爲顯示被紅牌罰下之前解決你的問題。
另一件事你可以嘗試是Win32消息WM_SETREDRAW
// ... this would be defined in some reasonable location ...
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(HandleRef hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam);
static void EnableRepaint(HandleRef handle, bool enable)
{
const int WM_SETREDRAW = 0x000B;
SendMessage(handle, WM_SETREDRAW, new IntPtr(enable ? 1 : 0), IntPtr.Zero);
}
其他地方在你的代碼你有
HandleRef gh = new HandleRef(this.Grid, this.Grid.Handle);
EnableRepaint(gh, false);
try
{
this.doStuff();
this.doOtherStuff();
this.doSomeReallyCoolStuff();
}
finally
{
EnableRepaint(gh, true);
this.Grid.Invalidate(); // we need at least one repaint to happen...
}
可能重複[如何暫停繪畫控制和它的孩子?](http://stackoverflow.com/questions/487661/how-do-i-suspend-painting-for-a-control-and-its-children) – 2011-11-09 17:34:26
請參閱http://stackoverflow.com/問題/ 487661 /怎麼辦,我懸繪畫-FOR-A-CONTRO l和它的孩子 – Simon 2009-03-17 14:47:36