А если получать хендл заново каждый раз непосредственно перед применением, избавляет ли это от необходимости фиксации массива в памяти?
Нет. Хендл относится к контексту устройства, а массив к битмэпу (никакой взаимосвязи).
Представь ситуацию:
Form1.BackgroundImage = Bmp
Сборщик мусора в какое то время перемещает массив.
Ты делаешь какое либо действие, в результате которого форме посылается Refresh. Форма пытается обратиться к битмэпу по несуществующему адресу. Результат - исключение памяти.
Если ты не получаешь это исключение в данный момент, то не надейся, что ты не получишь его в будущем. Так что фиксировать массив в таких случаях крайне желательно.
- Код: Выделить всё
SetDIBitsToDevice(Graphics.FromHwnd(Me.Handle.ToInt32).GetHdc, ....
так делать нежелательно.
На каждый вызов GetHdc надо делать вызов ReleaseHdc
2. Нужно ли заново получать хендл при изменении размера массива (формы)?
нет.