Имейте в виду, что в конце концов методы S.W.F.MessageBox.Show () являются в основном оболочками вокруг основного вызова Win32 MessageBox () API. (Запустите mscorlib через Reflector; вы увидите «настоящий» код в закрытых методах ShowCore.)
Насколько я знаю, не предусмотрено никаких условий для кэширования вызываемого MessageBox в Win32, поэтому в .NET нет способа сделать это.
У меня есть свой собственный класс MessageBox, который я использую - хотя я и сделал это не для его кэширования (в моих сценариях использования в WinForms один и тот же МБ используется редко дважды), а для обеспечения более подробного сообщение об ошибке и информация - заголовок, описание, возможность скопировать сообщение в буфер обмена (обычно это инструмент, который уведомляет пользователя о необработанном исключении), а затем кнопки.
Ваш пробег может отличаться.