У меня есть два фоновых потока и поток для обработки минимизации, выполняющийся в моем приложении WinForms. Когда программа закрывается, я использую этот метод.C# Добавление кода в событие FormClosing отключает X на MdiParent
private void MyForm_Closing(object sender, FormClosingEventArgs e)
{
if(labelsUpdaterThread.IsAlive == true)
labelsUpdaterThread.Abort();
if(printNotifyThread.IsAlive == true)
printNotifyThread.Abort();
if(minimizeThread.IsAlive == true)
minimizeThread.Abort();
}
labelsUpdaterThread and printNotifyThread все время работает. MinimizeThread, как вы могли догадаться, работает только при свертывании родительской формы. Вот моя проблема:
Когда методы thread.abort вызываются в моем методе выше, «X» в верхнем правом углу моей формы MdiParent ничего не делает. Щелчок по нему не влияет.
Когда методы thread.abort НЕ вызывается в моем методе выше, закрытие MdiParent иногда вызывает исключения, поскольку потоки все еще пытаются получить доступ к ресурсам на MdiParent, которые больше не доступны, хотя они являются фоновыми потоками!
Я не уверен, почему это происходит, не имеет для меня никакого смысла. Заранее благодарю за любую помощь!
Если вы не делаете никаких проверок, которые могли бы отменить событие закрытия, вы должны использовать 'FormClosed' вместо' FormClosing'. – unholysampler
Пожалуйста, не редактируйте образец кода в вопросе. Это может привести к тому, что ответы, приведенные ранее, выглядят некорректно. –
@unholy: FormClosed происходит после закрытия формы. Мое приложение затем генерирует исключения, потому что они пытаются получить доступ к ресурсам в закрытом потоке. – CODe