Недавно я подготовил некоторые курсовые работы для некоторых студентов, для которых они должны использовать небольшую и относительно простую библиотеку C #, предоставляемую им. Основная цель этой библиотеки - отобразить простую форму, которая состоит из цветной сетки (которой они могут манипулировать), нескольких кнопок и метки с некоторым текстом.
Класс, который они расширяют, предоставляет ряд абстрактных методов, которые они должны реализовать, один из которых называется UpdateAction и автоматически вызывается через заданные интервалы.
Я сам не сталкивался со следующей проблемой, но в лабораториях некоторые студенты сталкивались с прерывистым InvalidOperationException, возникающим в их методе UpdateAction при закрытии формы. Сообщение об ошибке - это ошибка, которую я обычно ожидаю увидеть, когда вы пытаетесь изменить пользовательский интерфейс из другого потока, но есть только двойная кавычка ''
, в которой вы обычно видите имя нарушающего элемента управления.
Если это по-прежнему является проблемой, нам нужно будет переиздать им фиксированную версию библиотеки, хотя мы уже заявляли, что эта ошибка никак не повлияет на маркировку их работы (так как она кажется недостатком в нашем коде) .
Насколько я могу судить, ученики должны закрывать форму в такой точке, когда выполняется обновление, и изменяемые ими элементы управления удаляются до остановки потока обновления, т.е. кажется, что элементы управления стали нулевыми. Странно то, насколько это прерывисто, у некоторых студентов никогда не было проблемы, в то время как у других она была постоянно. Я никогда не сталкивался с этим лично при разработке типовых решений для курсовой работы или при разработке самой библиотеки.
Так что мой вопрос в том, в какой точке жизненного цикла формы удаляются элементы управления, и, следовательно, куда лучше поместить код, останавливающий поток обновления? В настоящее время этот код находится в методе Dispose форм, лучше ли его разместить в другом месте?