К сожалению, private
члены внутренних классов Kotlin не доступны из внешнего экземпляра:
blockquote>
private
означает, что видимы только внутри этого класса
[114 ] Ссылка на Kotlin / Модификаторы видимостиТем не менее, Java не имеет таких ограничений с ее модификаторами видимости:
access разрешено, если и только если это происходит в теле типа верхнего уровня ( §7.6 ), которое включает в себя объявление члена или конструктора.
blockquote>
Спецификация языка Java / §6 Имена / §6.6 Контроль доступа / §6.6.1 Определение доступности [ 1110]Это один из немногих (раздражающих) случаев, которые я обнаружил, когда правила Котлина делают общий шаблон Java невозможным.
Единственные обходные пути (, если вы хотите сохранить свою текущую структуру), это переписать этот класс в Java или предоставить этому конструктору менее ограниченную видимость (например,
internal
.) [1120 ]Об этом было обсуждение на форумах Kotlin - кажется, что это ограничение JVM, и что оно работает только в Java, потому что компилятор генерирует соответствующие
synthetic
средства доступа.
Можно попробовать
Application.DoEvents()
прямо после того, как окно сообщения закрывается. Однако - если Вы не выполняете метод, который Вы называете в том другом классе в фоновом потоке - Ваш UI не будет быстро реагирующим в течение 10 секунд.
То, что 10 секунд проведены, делая работу полностью в UI? В противном случае это должно действительно быть сделано на отдельном потоке. Даже при обновлении самой формы Вы все еще собираетесь иметь безразличный UI в течение 10 секунд, который не идеален.
См. мое учебное руководство по поточной обработке для примера выполнения кода в другом потоке и призывании обратно к потоку UI. Знайте, что это - "старый" способ сделать вещи - BackgroundWorker делает вещи несколько более простыми.
Проблема здесь состоит в том, что у Вас есть обработка, которая происходит на потоке UI и блокирует сообщение краски. Вызов Обновления или Делает недействительным, не собирается фиксировать это, поскольку Вы все еще блокируетесь на потоке, который выполнил бы те операции.
Скорее необходимо взять ту обработку и переместить ее в другой поток и затем обновить поток UI (соответственно, через Вызвать метод, более вероятно, чем не), поскольку Вы выполняете работу над фоновым потоком.
Для принуждения все для перекрашивания Вас может звонить, Делают недействительным () на основной форме.
Ваша проблема состоит в том, что Вы делаете свою работу над потоком UI. UI не будет перекрашен до Ваших возвратов метода, которые позволят циклу сообщения Windows продолжаться.
Решение состоит в том, чтобы выполнить Ваш метод работы на другом потоке. Возможно, класс BackgroundWorker решит Вашу проблему приятно.
Править: См. эту статью для подробно объяснение:
http://www.yoda.arachsys.com/csharp/threads/winforms.shtml