У меня есть фоновый работник в приложении C ++ .NET Forms, которое работает асинхронно. В функции DoWork этого фонового работника я хочу добавить строки в представление данных, однако я не могу понять, как это сделать с помощью BeginInvoke, так как код, который у меня, похоже, не работает.
код, который у меня есть
delegate void invokeDelegate(array<String^>^row);
....
In the DoWork of the backgroundworker
....
array<String^>^row = gcnew array<String^>{"Test", "Test", "Test"};
if(ovlgrid->InvokeRequired)
ovlgrid->BeginInvoke(gcnew invokeDelegate( this, &Form1::AddRow), row);
....
void AddRow(array<String^>^row)
{
ovlgrid->Rows->Add( row );
}
Я получаю ошибку:
Необработанное исключение типа
«System.Reflection.TargetParameterCountException» произошло в
mscorlib.dll
Дополнительная информация: Несоответствие количества параметров.
Когда я изменяю код, чтобы не передавать какие-либо параметры, он просто работает, код становится:
delegate void invokeDelegate();
...
In the DoWork function
...
if(ovlgrid->InvokeRequired)
ovlgrid->BeginInvoke(gcnew invokeDelegate( this, &Form1::AddRow));
...
void AddRow()
{
array<String^>^row = gcnew array<String^>{"test","test2","test3"};
ovlgrid->Rows->Add( row );
}
Проблема в том, что я хочу передать параметры.
Мне было интересно, что я делаю неправильно, что вызывает исключение параметра и как это исправить?