Добавьте flex-grow: 1 и flex-shrink: 0 к вашему h2. Это предотвратит сокращение h2. Кроме того, поскольку вы ограничиваете относительный максимум, который может вырасти h2 (40%), он все равно сломается.
РЕДАКТИРОВАТЬ:
Flex-Grow / Shrink отсутствовал в .container>div
. Добавьте правило flex: 1 1 авто; поэтому они расширяются равномерно, чтобы заполнить всю ширину.
.container {
background: grey;
display: flex;
}
.container>div {
align-items: center;
display: flex;
flex: 1 1 auto;
}
h2 {
flex: 1 0 40%;
white-space: nowrap:
/*flex-basis: 40%;*/
}
p {
flex-basis: 60%;
}
<div class="container">
<div>
<h2>This Is Title A</h2>
<p>Content.</p>
</div>
<div>
<h2>This Is Title B</h2>
<p>Content.</p>
</div>
</div>
Вы можете добавить try / catch / finally
создайте вокруг вашего метода входа Main ()
.
Для WinForms вы можете добавить обработчик ThreadException
непосредственно перед Application.Run (), чтобы перехватывать исключения, генерируемые в обработчиках событий пользовательского интерфейса WinForms:
Application.ThreadException + =
новый ThreadExceptionEventHandler (Application_ThreadException);
Все другие необработанные исключения можно перехватить с помощью:
AppDomain.CurrentDomain.UnhandledException + =
новый UnhandledExceptionEventHandler (CurrentDomain_UnhandledException);
Но стоит упомянуть, что это позволяет вам только регистрировать / сообщать об исключении - вы не можете предотвратить закрытие приложения после выхода из этого окончательного обработчика.
Visual Studio также может быть настроен на разрыв при первом случае исключения и внешние отладчики (например, WinDbg с управляемыми расширениями SoS) также могут перехватывать исключения первого шанса ( http://www.codeproject.com/KB/debug/windbg_part1.aspx ). 1218] Кроме того, используйте каркас журналирования, такой как log4net, чтобы добавить полезное ведение журнала в ваше приложение и сбросить информацию об исключениях до закрытия приложения.
Спросите своих пользователей, могут ли они воспроизвести ошибку и как. Если вы можете воспроизвести ошибку, запустите отладку в Visual Studio и следуйте инструкциям, чтобы вызвать сбой. Visual Studio перейдет в режим отладки, где она поймает ошибку. Форма там вы сможете следить за трассировкой стека и посмотреть, какой код вызывает ошибку. Visual studio большую часть времени делает отладку довольно простой.
Ошибки «отправить / не отправить», как правило, возникают, когда у вас есть необработанное исключение в фоновом потоке (основной поток покажет, что продолжить / выйти из диалогового окна .NET с трассировкой стека) ).
Добавьте обработчик исключений в функцию вашего потока и войдите оттуда:
void RunMyThread()
{
try
{
// background thread code
}
catch (Exception ex)
{
// Log the exception
}
}
Это очень упрощено и может не соответствовать тому, как вы хотите обработать исключение. Но, надеюсь, это заставит вас двигаться в правильном направлении.
В идеале вы должны использовать библиотеку журналов, такую как nLog или log4net , чтобы регистрировать любые необработанные исключения и исключения в целом, регистрируя их в своем коде при их возникновении.
Это также может помочь в создании разных уровней регистрации в вашем приложении, чтобы помочь вам отследить проблему, когда она не запущена на вашей машине разработки. С помощью nLog вы можете оставить запись в рабочем коде и включить / отключить вывод журнала с помощью файла конфигурации регистрации.
Я не использовал log4net, поэтому не знаю, имеет ли он подобную функцию.
Если это происходит на сайте клиента и не может быть легко воспроизведено в отладчике разработчика, вы можете выполнить некоторую посмертную отладку. Мне нравится использовать Userdump для сбора файла дампа памяти (.DMP). Затем я использую windbg для анализа.
Используйте WinDBG для устранения проблемы. Вы можете отключить его (как при остановке на точке останова) при возникновении исключения, а затем исследовать трассировку стека ... объекты в области видимости и т. Д.