ДЧ
Дмитрий Чернов

Диалоги и потоки в c#

Мне надо написать простенькое SDI приложение типа блокнот. Я создаю формы так:
void NewForm()
{
Form1 form2 = new Form1();
form2.ShowDialog();
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
new System.Threading.Thread(NewForm).Start();
}
Следующий код работает только если вызывать событие из главной (первой) формы:
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.ShowDialog();
}
Ошибка: 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. This exception is only raised if a debugger is attached to the process.
Подскажите как сделать так, чтобы диалоги можно было вызывать из любой новой формы, даже если первую закрыть. Как в SDI приложениях.

Дина
Дина

new System.Threading.Thread(NewForm).Start();

Все формы всегда работают в одном потоке. Если вы создаёте поток то он обрабатывается параллельно со всеми другими. Появляется предпосылка необходимости синхронизации потоков для передачи данных между ними. И даже если вы и запустите поток, передать из него данные в форму можно только выполнив синхронизацию (lock, Monitor, AutoResetEvent, ManualResetEvent, SyncronizationСontext, Interlocked, ReaderWriterLockSlim, BackgroundWorker)

Для Notepad поток пригодился бы для загрузки документа. Чтобы основное окно не подвисало при чтении большого текстового файла. Всю работу можно организовать через BackgroundWorker

Похожие вопросы
Подскажите как создать диалог?
Автообновление сообщений в диалоге
что лучше C# или C++
Как организовать пересылку переменных и структур между диалогами? MS Visual C++ 9
что такое поток данных в c++?
Помогите с потоками в Java
Как при считывании файла потоком ifstream считать файл до конца? C++
Как проверить на пустоту буфер потока cin ? (C++)
C/C++
Синхронизация потоков