• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

потоки и Invoke

  • Автор темы met123
  • Дата начала
M

met123

короче следующая ситуация
есть формочка с кнопкой , при нажатии которой создаеться поток и в єтом потоке создается другая форма,как модальная (что б поток не завершился) , тоже припустим с кнопкой. Вот. по идеи форма создана єтим потоком и из него можна лазить по контролам єтой формы. Но если при нажатии на кнопку этой формы мне нужно, к примеру, отобразить диалог открытия файла или выбора папки ..... ниче не выходит!!!
это вот первая форма:



{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}


public void start()
{
Form2 frm = new Form2();


}

private void button1_Click(object sender, EventArgs e)
{
Thread mythread = new Thread(new ThreadStart(start));

mythread.Start();
mythread.Join();

}
}
}

это вот вторая форма:



namespace WindowsApplication16
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

public delegate void browser();
public void open()
{
folderBrowserDialog1.ShowDialog();

}
public void start()
{
Invoke(new browser(open));
}

private void button1_Click(object sender, EventArgs e)
{
Invoke(new browser(open));




}
}
}



ошибка та же :

Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it.
 
M

mr_ST

Не очень то понял логику построения форм, но порекомендую следующие правила:
1. С формой нужно работать только из того потока в котором она создана, в противном случае invoke
2. GUI делают в одном основном потоке, доп потоки играют роль worker-ов
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!