Как проверить фоновую работу форм из другой формы - PullRequest
1 голос
/ 16 сентября 2011

У меня есть 2 winforms, одна (назовите это Form1) содержит фонового работника, и эта форма открывает вторую форму (Form2). Form1 запускает фоновый рабочий и во время его работы открывает Form2, чтобы пользователь мог делать что-то еще. Когда пользователь завершит заполнение формы Form2 и нажмет кнопку «Отправить», я хочу проверить, работает ли фоновый рабочий формы Form1 и не появляется ли сообщение с просьбой подождать минуту, иначе разрешить отправку формы Form2.

Как я могу проверить статус фонового работника Form1 из Form2? Я посмотрел на этот пост Проверьте, работает ли поток в другой форме , но у меня другая ситуация, и я не уверен, как адаптироваться.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2011

Ситуация почти аналогична той, которая указана в вашем вопросе.Вы можете сделать что-то вроде этого:

public class Form1 
{
   public bool IsBackgroundWorkerStillRunning {get {....};}
}


public class Form2 
{
    Form1 form1 = null;
    public Form2(Form1 frm1)
    {
      form1 = frm1;
    }

     private void OnSubmit(...)
     {
         if(form1.IsBackgroundWorkerStillRunning )
              //wait 
         else
              //proceed
     }
}

один, у формы Form1 есть свойство, которое проверяет фоновое рабочее состояние

0 голосов
/ 16 сентября 2011

Проверьте свойство BackgroundWorker.IsBusy .

Редактировать

Существуют различные варианты сделать эту информацию доступной для второй формы.

  • Вы можете передать BackgroundWorker в Form2 при создании. Затем Form2 может проверить свойство IsBusy.

  • Вы можете создать публичное свойство IsRunningBackgroundWork в Form1 и дать Form2 ссылку на Form1. Получатель этого свойства будет проверять BackgroundWorker.IsBusy.

  • Вы можете создать открытое свойство CanSubmit в Form2 и установить его из Form1 после завершения BackgroundWorker.

    bgw.RunWorkerCompleted += (s, e) => form2.CanSubmit = true;

В качестве альтернативы (и я думаю, что это лучше), вы можете поместить код отправки в Form1 и просто использовать Form2 в качестве диалога. Тогда Form2 не нужно ничего знать о Form1. Form1 открывает Form2 модально, и когда Form2 закрывается, Form1 проверяет, закончен ли работник, и действует соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...