Задать вопрос
Ilfar_sif
@Ilfar_sif
эникейщик

Как закрыть Form2 через Form1 из другого потока C#?

Через Form1 запускаю Form2 с ProgressBar:
private void Button1_Click(object sender, EventArgs e)
        {
          if (backgroundWorker1.IsBusy != true)
            {
                frm2 = new Form2();
                frm2.Canceled += new EventHandler<EventArgs>(buttonCancel_Click);
                frm2.Show();
                backgroundWorker1.RunWorkerAsync();
            }
        }

Если ts.Connect() возвращает false, тогда закрываю форму Form2:
//делает трудоемкую работу

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            worker = sender as BackgroundWorker;
            //проверяем не запрошено-ли отмена фоновой операции
            if (worker.CancellationPending == true)
            {
                e.Cancel = true;
            }
            else
            {
                // Выполняем трудоемкую операцию 

                Tcp_Socket ts = new Tcp_Socket();
                bool ab=ts.Connect();
                if (ab == false)
                {
                    e.Cancel = true;
                      // Отмена асинхронной операции.
                backgroundWorker1.CancelAsync();

                // Закрываем Form2
               frm2.Close();
                    
                }

             
            }

        }

Выдает ошибку на frm2.Close()
Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'Form2' не из того потока, в котором он был создан."
Помогите решить проблему! Как закрыть Form2 из Form1 с другого потока. Может с делегатами как-то можно?
  • Вопрос задан
  • 709 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@tex0
Тут читайте
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы