Этот код, вероятно, далеко от правильного пути. Я просто эмулирую то, что я делаю на C# для обновлений кросс-потоков. Фактический ответ исходил из комментариев.
инициализации формы, делегаты установки, запуска второй нитки:
public ref class Form_1 : public System::Windows::Forms::Form
{
public:
CL* c;
delegate System::Void CrossThreadUpdate(Object^ obj);
CrossThreadUpdate^ crossThreadUpdate;
void update(Object^ obj);
Thread^ t;
void updateTextArea(String^ text);
void initCL();
Form_1(void)
{
InitializeComponent();
crossThreadUpdate = gcnew CrossThreadUpdate(this, &Form_1::update);
t = gcnew Thread(gcnew ThreadStart(this, &Form_1::initCL));
t->Start();
//
//TODO: Add the constructor code here
//
}
нить делает свое дело, а затем позволяет нам его сделали
void Form_1::initCL()
{
c = new CL();
updateTextArea("CL READY");
}
обновление формы
void Form_1::update(Object^ obj) {
array<Object^>^ arr = (array<Object^>^)obj;
int^ op = safe_cast<int^>(arr[0]);
switch(*op)
{
case 1:
String^ text = safe_cast<String^>(arr[1]);
wstring stringConvert = L"";
MarshalString(text, stringConvert);
wcout << stringConvert << endl;
this->textBox1->Text += text + "\r\n";
break;
}
}
void Form_1::updateTextArea(String^ text) {
array<Object^>^ args = gcnew array<Object^>(1);
array<Object^>^ inArgs = gcnew array<Object^>(2);
inArgs[0] = 1;
inArgs[1] = text;
args[0] = inArgs;
this->Invoke(crossThreadUpdate, args);
}
10 Я думаю, вы имеете в виду: «Как вы можете преобразовать std :: string в String ^?». В любом случае, ищите 'Marshal :: PtrToStringAnsi'. – user2246674
omg, который сработал! благодаря! если вы опубликуете это в качестве ответа, я его приму. – user1873073
Отправьте код, в котором вы закончили использование с соответствующими ресурсами/ссылками и само-принимайте :-) – user2246674