Ожидание по таймеру - очень, очень плохая идея, довольно просто, это эвристика, и вы догадываетесь, когда будет выполнена операция изменения размера.
Лучше было бы получить класс из WindowsFormsHost
и переопределить метод WndProc
, обрабатывая сообщение WM_SIZE
. Это сообщение, которое отправляется окну, когда операция размера завершена (в отличие от WM_SIZING
, которое отправляется в процессе).
Вы также можете обрабатывать сообщение WM_SIZING
и не вызывать базовую реализацию WndProc
, когда получаете это сообщение, чтобы предотвратить обработку сообщения и перерисовку карты все это время.
В документации по методу WndProc
класса Control
показано, как переопределить метод WndProc
:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.wndproc(VS.71).aspx
Несмотря на то, что это для другого класса, это тот же самый основной принцип.
Кроме того, вам понадобятся значения для констант WM_SIZING
и WM_SIZE
, которые вы можете найти здесь:
http://www.pinvoke.net/default.aspx/Enums/WindowsMessages.html
Обратите внимание, что вам не нужно все из ссылки выше, только объявления для этих двух значений:
/// <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;