2012-05-29 2 views
0

У меня есть функцияКак создать экземпляр делегата?

void __stdcall TestThread(String^ a, String^ b) 
{ 
MessageBox::Show(a); 
MessageBox::Show(b); 

_endthread(); 
} 

И я хочу, чтобы создать поток, как это:
_beginthread(&HWSW_GUI::Form1::TestThread , 0, NULL);

К сожалению, я получаю сообщение об ошибке: Error 2 error C3374: can't take address of 'HWSW_GUI::Form1::TestThread' unless creating delegate instance d:\testvs2008\hwsw_gui\hwsw_gui\Form1.h 5177

Может кто-нибудь помочь мне, пожалуйста? Это сводит меня с ума, и я не могу понять это.

Спасибо!

+0

Не смешивайте управляемый и неуправляемый код. Вместо _beginthread используйте управляемый поток http://msdn.microsoft.com/en-us/library/system.threading.thread.aspx#Y5314 –

+0

@AlexFarber: Спасибо! Он работает сейчас. Еще один вопрос. Как передать аргументы в поток? – kampi

ответ

0

Используйте управляемую нить вместо _beginthread.

Чтобы передать параметр в поток, использование резьба (ParameterizedThreadStart) Конструктор: http://msdn.microsoft.com/en-us/library/1h2f2459.aspx

Вообще, работая с любым языком .NET, включая C++/CLI, избегать использования неуправляемых вещей (как PInvoke или смешивания регулировались/неуправляемый код в C++/CLI), если это не является абсолютно необходимым. Большинство стандартных задач программирования могут быть решены с использованием чистого управляемого кода.

+0

И знаете ли вы, как передать несколько аргументов в поток? Например, bool и String ^? Вот почему я хотел использовать _beginthread, потому что я не мог заставить его работать :(Я не мог передать несколько аргументов таким образом. – kampi

+0

Создайте класс, который содержит все, что вам нужно, и передайте этот экземпляр класса как параметр потока. –

+0

Спасибо! работает сейчас! – kampi

Смежные вопросы