Как вынудить Кнопки, TextBoxes перекрасить на форме после того, как MessageBox закрывается в C#

К сожалению, private члены внутренних классов Kotlin не доступны из внешнего экземпляра:

private означает, что видимы только внутри этого класса
[114 ] Ссылка на Kotlin / Модификаторы видимости

blockquote>

Тем не менее, Java не имеет таких ограничений с ее модификаторами видимости:

access разрешено, если и только если это происходит в теле типа верхнего уровня ( §7.6 ), которое включает в себя объявление члена или конструктора.
Спецификация языка Java / §6 Имена / §6.6 Контроль доступа / §6.6.1 Определение доступности [ 1110]

blockquote>

Это один из немногих (раздражающих) случаев, которые я обнаружил, когда правила Котлина делают общий шаблон Java невозможным.

Единственные обходные пути (, если вы хотите сохранить свою текущую структуру), это переписать этот класс в Java или предоставить этому конструктору менее ограниченную видимость (например, internal.) [1120 ]

Об этом было обсуждение на форумах Kotlin - кажется, что это ограничение JVM, и что оно работает только в Java, потому что компилятор генерирует соответствующие synthetic средства доступа.

5
задан bdukes 13 January 2009 в 17:43
поделиться

5 ответов

Можно попробовать

Application.DoEvents()

прямо после того, как окно сообщения закрывается. Однако - если Вы не выполняете метод, который Вы называете в том другом классе в фоновом потоке - Ваш UI не будет быстро реагирующим в течение 10 секунд.

8
ответ дан 18 December 2019 в 09:54
поделиться

То, что 10 секунд проведены, делая работу полностью в UI? В противном случае это должно действительно быть сделано на отдельном потоке. Даже при обновлении самой формы Вы все еще собираетесь иметь безразличный UI в течение 10 секунд, который не идеален.

См. мое учебное руководство по поточной обработке для примера выполнения кода в другом потоке и призывании обратно к потоку UI. Знайте, что это - "старый" способ сделать вещи - BackgroundWorker делает вещи несколько более простыми.

6
ответ дан 18 December 2019 в 09:54
поделиться

Проблема здесь состоит в том, что у Вас есть обработка, которая происходит на потоке UI и блокирует сообщение краски. Вызов Обновления или Делает недействительным, не собирается фиксировать это, поскольку Вы все еще блокируетесь на потоке, который выполнил бы те операции.

Скорее необходимо взять ту обработку и переместить ее в другой поток и затем обновить поток UI (соответственно, через Вызвать метод, более вероятно, чем не), поскольку Вы выполняете работу над фоновым потоком.

3
ответ дан 18 December 2019 в 09:54
поделиться

Для принуждения все для перекрашивания Вас может звонить, Делают недействительным () на основной форме.

0
ответ дан 18 December 2019 в 09:54
поделиться

Ваша проблема состоит в том, что Вы делаете свою работу над потоком UI. UI не будет перекрашен до Ваших возвратов метода, которые позволят циклу сообщения Windows продолжаться.

Решение состоит в том, чтобы выполнить Ваш метод работы на другом потоке. Возможно, класс BackgroundWorker решит Вашу проблему приятно.

Править: См. эту статью для подробно объяснение:
http://www.yoda.arachsys.com/csharp/threads/winforms.shtml

0
ответ дан 18 December 2019 в 09:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: