Основной программный пакет моей компании включает в себя здоровенную библиотеку конфигурации, которая загружается при запуске. Эта библиотека конфигурации содержит некоторые обязательные параметры, которые, если они не предоставлены (через аргументы командной строки), приводят к закрытию всего приложения.
Это никогда не было проблемой для наших пользователей, которые запускают программное обеспечение с помощью сценариев, в которых необходимые аргументы командной строки предоставляются автоматически. Но иногда при отладке нашего программного обеспечения мы, разработчики, забываем указывать необходимые параметры в параметрах отладки Visual Studio; тогда это очень раздражает, когда меня приветствуют сообщением Спецификация конфигурации недействительна - отсутствуют обязательные параметры X, Y и Z - отключается (я перефразирую, конечно).
Это не так уж важно, просто раздражение. Тем не менее, я чувствовал, что стоит собрать небольшую форму, чтобы сделать этот процесс менее болезненным; он уведомляет пользователя о том, какие параметры отсутствуют, и позволяет ему / ей указывать значения этих параметров непосредственно в форме, не перезапуская приложение.
Мои намерения были хорошими (я думаю?), Но, похоже, я не могу заставить это решение действительно работать. Проблема в том, что после того, как я запустил наше программное обеспечение с пропущенными настройками, всплывает форма и выдает сообщение, как и ожидалось; но после того, как я ввел обязательные параметры и пришло время «по-настоящему» запустить приложение, я получаю InvalidOperationException
:
SetCompatibleTextRenderingDefault must
быть вызванным до первого
IWin32Window объект создается в
применение.
Мне кажется, я понимаю, что здесь происходит: проект VB.NET, над которым я работаю, делает что-то вроде этого "за кадром" *:
Sub Main()
Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
Application.Run(New MainForm)
End Sub
Этот вызов SetCompatibleTextRenderingDefault
, по-видимому, вызывает исключение, поскольку форма уже была создана и отображена до ее выполнения.
Есть ли способ обойти это? Возможно, есть более «правильное» решение этой проблемы, о котором я не думаю (т. Е. Не должен ли я вообще пытаться собрать пользовательский ввод через форму)?
* Это лучшее предположение, основанное на том, что я видел в проектах C # WinForms. Как ни странно, если я что-то упускаю, кажется, что проекты VB.NET WinForms полностью скрывают это от разработчика.