Я создал форму входа (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 .....

0
user3487506 2 Апр 2014 в 06:47

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.

0
NeverHopeless 2 Апр 2014 в 10:10

Вы можете сделать, как показано ниже

if (frmProcessing.ShowDialog() == DialogResult.OK)
{
     BackWorker.RunWorkerAsync()
}

Нет необходимости закрывать метод frmProcessing in ProgressChanged

0
Damith 2 Апр 2014 в 07:17