Я создал форму входа (frmLogin) на vb.net. При входе в систему я показываю диалог обработки (frmProcessing.ShowDialog). Когда пользователь нажимает кнопку входа в систему, он проверяет базу данных, доступен ли пользователь или нет в этой фоновой работе, я показываю диалоговое окно обработки. После проверки базы данных мне нужно закрыть это диалоговое окно обработки, после чего я хочу показать «welcome msgbox». Все работают хорошо, и проблема в том, что при отображении mesbox диалоговое окно обработки также работает. Я не могу закрыть его, пожалуйста, помогите мне ..... Спасибо заранее
Мой код .....
Авторизоваться()
frmProcessing.ShowDialog()
BackWorker.RunWorkerAsync()
Завершить вход
Выполнять работу()
IF CheckInDataBase(Username,Pass) then 'checking user available or not
BackWorker.ReportProgress(0) 'Here i need to show welcome msgbox
Else
BackWorker.ReportProgress(1) 'Here i need to show invalid pswd msgbox
End IF
Конец DoWork
ProgressChanged ()
frmProcessing.close() 'This code does not work
If e.ProgressPercentage=0 then
msgbox("Welcom")
elseif e.ProgressPercentage=1 then
msgbox("Invalid Pswd")
End IF
End ProcessChanged
Когда я показываю "welcome / invalid pswd msgbox" диалоговое окно обработки (frmProcessing), также работающее в фоновом режиме, мне нужно сначала закрыть его, а затем показать msgbox .....
2 ответа
Часть, которая вызывает проблему, похоже, находится в следующей части:
frmProcessing.close() 'This code does not work
If e.ProgressPercentage=0 then
msgbox("Welcom")
elseif e.ProgressPercentage=1 then
msgbox("Invalid Pswd")
End IF
Этот фрагмент кода shouldn't
является частью события Progress_Changed
. BackgroundWorker поддерживает другую функцию делегата RunWorkerCompleted, любые изменения в пользовательский интерфейс после завершения фонового процесса должно выполняться в этом делегате.
Итак, ваш код должен выглядеть так:
Dim isValidUser as Boolean ' Global variable
Private Sub backgroundWorker1_DoWork( _
ByVal sender As Object, _
ByVal e As DoWorkEventArgs) _
Handles backgroundWorker1.DoWork
isValidUser = CheckInDataBase(Username,Pass)
End Sub
Private Sub backgroundWorker1_RunWorkerCompleted( _
ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) _
Handles backgroundWorker1.RunWorkerCompleted
frmProcessing.Close()
If isValidUser then
msgbox("Welcom")
else
msgbox("Invalid Pswd")
End IF
End Sub
ПРИМЕЧАНИЕ. MSGBOX
- это стиль VB6. Вместо этого используйте MessageBox.Show
.
Вы можете сделать, как показано ниже
if (frmProcessing.ShowDialog() == DialogResult.OK)
{
BackWorker.RunWorkerAsync()
}
Нет необходимости закрывать метод frmProcessing in ProgressChanged
Похожие вопросы
Новые вопросы
vb.net
Visual Basic.NET (VB.NET) - это мультипарадигмальный, управляемый, типобезопасный, объектно-ориентированный язык компьютерного программирования. Наряду с C # и F # это один из основных языков, нацеленных на .NET Framework. VB.NET можно рассматривать как эволюцию Microsoft Visual Basic 6 (VB6), но реализованную в Microsoft .NET Framework. НЕ ИСПОЛЬЗУЙТЕ этот тег для вопросов VB6, VBA или VBScript.