Member 13569650 Ответов: 1

Я ищу способ сделать свое приложение таким, чтобы его код был размещен в том, что я пытался работать


"если я нажму кнопку Показать сообщение, то никакие сообщения не будут отображаться, потому что флаг ложен
- Когда я нажимаю кнопку falg false, чтобы переключить ее на флаг True.
- приложение не реагирует.
'
"как я могу сделать это простое приложение, чтобы реагировать, когда листать bettween
- правда и ложь
- Я очень благодарен Вам за любую помощь

'
'

Что я уже пробовал:

'
Система Импорта
Система Импорта.Окна.Формы

Модуль М1

Суб Основной()

Dim myForm как новая форма 1
ссылки.Метод showdialog()

Конец Подводной Лодки

Конечный Модуль


Общественного Класса Form1

Dim message1 As String = Nothing
Dim флаг как Boolean = False

Частная суб обработчика button1_click(отправителя как объект, а равно EventArgs) обрабатывает кнопки button1.Щелчок
'flag = True
LengthyTask()
Конец Подводной Лодки

Частная суб методе button2_click(отправителя как объект, а равно EventArgs) обрабатывает элемент button2.Нажмите
флаг = не флаг
Я.Кнопка 2.Text = "Flag =" & flag.Метод toString
Конец Подводной Лодки

Публичная Подзадача Длины()
Пока Это Правда
Если флаг то
Выходите Пока
Конец, Если
Конец Пока
с помощью MsgBox("текстовое поле textbox1.Текст = " &амп; текстовое поле textbox1.Текст)
Конец Подводной Лодки

End Класса


&ЛТ;глобальные.Майкрософт.на языке VisualBasic.compilerservices.designergenerated()&ГТ; _
Частичного Класса Form1
Наследует Систему.Окна.Форм.Форма

-Форма переопределяет dispose для очистки списка компонентов.
<system.diagnostics.debuggernonusercode()> _
Защищенные переопределения суб распоряжаться(бывал утилизации как логическое)
Попробуй
При утилизации, атакже компоненты ничего не значит
компоненты.Располагать()
Конец, Если
Окончательно
Моя база.Утилизация(утилизация)
Конец Попытки
Конец Подводной Лодки

- Требуется дизайнером форм Windows
Частные компоненты как система.ComponentModel.# То #

'Примечание: следующая процедура требуется конструктором форм Windows
- Его можно изменить с помощью конструктора форм Windows.
- Не изменяйте его с помощью редактора кода.
<system.diagnostics.debuggerstepthrough()> _
Частная Суб Метода Initializecomponent()
Me.TextBox1 = Новая Система.Окна.Формы.текстовый()
Me.Button1 = Новая Система.Окна.Формы.Кнопка()
Me.Button2 = Новая Система.Окна.Формы.Кнопка()
Меня.SuspendLayout()
'
'Текстовое поле textbox1
'
Меня.Текстовое поле textbox1.Расположение = Новая Система.Рисование.Точка(102, 222)
Меня.Текстовое поле textbox1.Наименование = "Элемент Textbox1"
Меня.Текстовое поле textbox1.Размер = Новый Система.Рисование.Размер(459, 22)
Я.Текстовое Поле 1.TabIndex = 0
'
'Кнопка button1
'
Я.Кнопка 1.Местоположение = Новая Система.Рисование.Точка(102, 124)
Я.Кнопка 1.Имя = "Button1"
Я.Кнопка 1.Размер = Новая Система.Рисование.Размер(234, 23)
Я.Кнопка 1.TabIndex = 1
Я.Кнопка 1.Text = "Показать Сообщение"
Я.Кнопка 1.UseVisualStyleBackColor = True
'
-Кнопка 2
'
Я.Кнопка 2.Местоположение = Новая Система.Рисование.Точка(362, 124)
Я.Кнопка 2.Наименование = "Элемент Button2"
Я.Кнопка 2.Размер = Новая Система.Рисование.Размер(199, 23)
Я.Кнопка 2.TabIndex = 2
Я.Кнопка 2.Text = "Flag = False"
Меня.Элемент button2.UseVisualStyleBackColor = Истина
'
-Форма 1
'
Me.AutoScaleDimensions = Новая Система.Рисование.SizeF(8.0!, 16.0!)
Me.AutoScaleMode = Система.Окна.Формы.AutoScaleMode.Font
Me.ClientSize = Новая Система.Рисование.Размер(688, 458)
Я-Контроль.Добавить(Me.Button2)
Я-Контроль.Добавить(Me.Button1)
Я-Контроль.Добавить(Me.TextBox1)
Me.Name = "Форма 1"
Me.Text = "Form1"
Me.ResumeLayout(False)
Меня.PerformLayout()

Конец Подводной Лодки
Друг WithEvents TextBox1 Как Система.Окна.Формы.текстовый
Друг С Событиями Button1 Как Система.Окна.Формы.Кнопка
Друг С Событиями Button2 Как Система.Окна.Формы.Кнопка

End Класса

F-ES Sitecore

Ваша форма однопоточна, и LengthyTask переходит в бесконечный цикл, который останавливает обработку сообщений вашего окна, поскольку существует только один поток, и он тратит все свое время на обработку вашего цикла, поэтому щелчок для button2 никогда не обрабатывается. Google, как запустить код в отдельном потоке.

Member 13569650

Большое спасибо.
Я понял ваш комментарий.

Но я блуждаю почему если я сначала нажму кнопку
Надпись на дисплее.
Флаг false и цикл while
войдите в бесконечность.
А теперь я нажимаю кнопку флага
это изменение флага на true
и сообщение отображается.

Так что если это один гхред то почему
Такое случается.

Member 13569650

Сори.
Я ошибаюсь.

1 Ответов

Рейтинг:
0

OriginalGriff

Вы не можете сделать это так: ваш LengthyTask метод работает в потоке пользовательского интерфейса и полностью блокирует его. Таким образом, нажатие кнопки никогда не признается, и флаг никогда не меняется.

Вам нужно перенести это в отдельный поток - я бы посоветовал вам начать с Класс BackgroundWorker (System.ComponentModel) | Microsoft Docs[^] экземпляр, поскольку он довольно прост в использовании и позволяет LengthyTask "разговаривать" с основным потоком через отчет о ходе выполнения.
Только поток пользовательского интерфейса может получить доступ к элементам управления, поэтому ваш новый поток не может отображать какие - либо сообщения, чтобы сообщить пользователю, что происходит непосредственно-и обработчик событий отчета о ходе выполнения BackgroundWorker автоматически выполняется в основном потоке, чтобы вы могли получить доступ к элементам управления.


Member 13569650

Большое спасибо.
Я понял ваш комментарий.

Но я блуждаю почему если я сначала нажму кнопку
Надпись на дисплее.
Флаг false и цикл while
войдите в бесконечность.
А теперь я нажимаю кнопку флага
это изменение флага на true
и сообщение отображается.

Так что если это один гхред то почему
Такое случается.

Member 13569650

Сори.
Я ошибаюсь.

OriginalGriff

Я как раз собирался спросить, Уверены ли вы! :смеяться: