Я думаю это. SuspendLayout () и ResumeLayout () должен сделать это
Я не нахожу SuspendLayout()
и ResumeLayout()
сделайте то, что Вы просите. LockWindowsUpdate()
упомянутый moobaa добивается цели. Однако LockWindowUpdate
только работы для одного окна за один раз.
Можно также попробовать это:
using System;
using System.Windows.Forms;
using Microsoft.Win32;
using System.Runtime.InteropServices;
public partial class Form1 : Form
{
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
private const int WM_SETREDRAW = 11;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SendMessage(this.Handle, WM_SETREDRAW, false, 0);
// Do your thingies here
SendMessage(this.Handle, WM_SETREDRAW, true, 0);
this.Refresh();
}
}
Можно использовать старую Win32LockWindowUpdateфункцию :
[DllImport("user32.dll")]
private static extern long LockWindowUpdate(long Handle);
try {
// Lock Window...
LockWindowUpdate(frm.Handle);
// Perform your painting / updates...
}
finally {
// Release the lock...
LockWindowUpdate(0);
}
Можно использовать методы SuspendLayout и ResumeLayout в форме или средствах управления при обновлении свойств. При привязке данных со средствами управления, можно использовать методы BeginUpdate и EndUpdate.
Большинство сложных сторонних компонентов Windows Forms имеет BeginUpdate
и EndUpdate
методы или подобный, для выполнения пакета обновлений и затем рисования управления. На уровне формы нет такой вещи, но Вам могло быть интересно путем включения Двойной буферизации.
SuspendLayout поможет производительности, если обновления включат изменения в средствах управления и расположении: MSDN