Подскажите, из потока нельзя обращаться к элементам формы ? Я хотел чтоб поток мне на кнопку тыкнул, но любое обращение к элементам формы это ошибка (какое-то исключение). Как мне быть ? У меня основная сложность в том, что функция потока может быть бесконечной, а может и завершиться сама собой. Вот нужно чтоб она сообщила как-то об этом элементам формы. Например на кнопку нажала на форме или какой-то текс в текстбокс вывела. Простой MessageBox::Show(); не пойдёт. среда: Visual Studio 2010 C++ Code: System::Threading::Thread^ thread1; private: void func() // функция { // тут код функции } private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) { // запускаю поток нажатием кнопки thread1 =gcnew System::Threading::Thread(gcnew System::Threading::ThreadStart(this,&Form1::func)); thread1->Start(); } private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) { //вот так останавливаю if(thread1!=nullptr && thread1->IsAlive) thread1->Abort(); }
Необработанное исключение типа "System.InvalidOperationException" произошло в System.Windows.Forms.dll Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'textBox1' не из того потока, в котором он был создан. т.е. это тупо невозможно чтоли ?( печалька(
Ты второй пост читал? Нужна синхронизация потоков, дело в том, что форма не может одновременно взаимодействовать с несколькими потоками. Для этого и нужно проверять. Не очень знаком с синтаксисом C++, но на C# это выглядит так: Code: Invoke(new MethodInvoker(() => { работаем с формой })); Хотя есть и альтернативы, делегаты например
вроде и так нашёл решение. запускасть одну и ту же функцию в зависимости от ситуации либо в потоке, либо нет. но твоя информация полезна. пасиба.