问题
I need to return four dimensional array of strings during the work of background worker which is receiving data via serial port.
In background worker:
array<String^>^ Received = gcnew array<String^>(4);
backgroundWorker1->ReportProgress(10,Received);
In report progress:
private: System::Void backgroundWorker1_ProgressChanged(System::Object^ sender, System::ComponentModel::ProgressChangedEventArgs^ e)
{
array<String^>^ Received2 = gcnew array<String^>(4);
Received2 =(e->UserState);
}
I am getting:
error C2440: '=' : cannot convert from 'System::Object ^' to 'cli::array "
which is not a surprise, but how to convert and assign UserState
to string array
?
回答1:
You need to cast the object handle to an array handle then check for a nullptr to see if the cast was successful e.g:
array<String^>^ Received2 = dynamic_cast<array<String^>^>(e->UserState);
if (Received2 != nullptr)
{
// Cast was successful, safe to use Received2.
}
else
{
// Cast failed, do not use Received2.
}
来源:https://stackoverflow.com/questions/13106860/convert-systemobject-to-string-array