Через 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 с другого потока. Может с делегатами как-то можно?