Esperar con un temporizador es una idea muy, muy mala, simplemente, es una heurística y está adivinando cuando se realiza la operación de cambio de tamaño.
Una mejor idea sería derivar una clase de WindowsFormsHost
y anular el método WndProc
, manejando el mensaje WM_SIZE
. Este es el mensaje que se envía a una ventana cuando se completa la operación de tamaño (a diferencia de WM_SIZING
, que se envía durante el proceso).
También puede manejar el mensaje WM_SIZING
, y no llamar a la implementación base de WndProc
cuando recibe este mensaje, para evitar que el mensaje se procese y hacer que el mapa se rediseñe todas esas veces.
La documentación para el método de la clase WndProc
Control
muestra cómo reemplazar WndProc
método:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc(VS.71).aspx
A pesar de que es de una clase diferente, es el mismo principio exacto.
Además, se necesitan los valores para los WM_SIZING
y WM_SIZE
constantes, que se pueden encontrar aquí:
http://www.pinvoke.net/default.aspx/Enums/WindowsMessages.html
Tenga en cuenta que no es necesario todo, desde el enlace de arriba, a las declaraciones de esos dos valores:
/// <summary>
/// The WM_SIZING message is sent to a window that
/// the user is resizing. By processing this message,
/// an application can monitor the size and position
/// of the drag rectangle and, if needed, change its
/// size or position.
/// </summary>
const int WM_SIZING = 0x0214;
/// <summary>
/// The WM_SIZE message is sent to a window after its
/// size has changed.
/// </summary>
const int WM_SIZE = 0x0005;
He borrado mi respuesta, no estaba tratando de asumir que debe ejecutar el temporizador todo el tiempo. De cualquier manera, estoy interesado en este método. Cualquier enlace o muestras? – bendewey
pinvoke.net es tu amigo ... =) –