2014-03-08 2 views
1

У меня есть приложение, которое, когда занято, открывает занятую форму (FormWaitingForm), чтобы указать пользователю, что приложение занято. Как закрыть FormWaitingForm в событии backgroundWorker1_RunWorkerCompleted ниже?Закрыть занятой форме, когда фон-работник завершен?

private void radButtonCheckFiles_Click(object sender, EventArgs e) 
     { 
        var bw = new BackgroundWorker(); 

        // define the event handlers 
        bw.DoWork += new DoWorkEventHandler(ProcessTickTemp); 

        bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted); 

        bw.RunWorkerAsync(); // starts the background worker 

        // execution continues here in parallel to the background worker 


        using (var FormWaitingForm = new WaitingForm()) // 
        { 
         var result = FormWaitingForm.ShowDialog(); 

        } 
} 

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
     { 
      // How do i close FormWaitingForm here ? 
     } 

ответ

2

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

WaitingForm formWaitingForm; 

private void radButtonCheckFiles_Click(object sender, EventArgs e) 
{ 
    // background code here 

    formWaitingForm = new WaitingForm(); 
    formWaitingForm.Show(); 
} 

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    formWaitingForm.Close(); 
    formWaitingForm.Dispose(); 
} 

Вам нужно будет добавить код для обработки, если пользователь закрывает форму ожидания, не дожидаясь, пока вы это сделаете.

Таким образом, способ, которым я обычно реализую форму ожидания/прогресса, заключается в том, чтобы включить фоновый процесс в сам процесс выполнения и показать что-то вроде индикатора выполнения.

This link может дать вам еще несколько идей.

Смежные вопросы