1

I have an application with a ListView that contains some filenames and filepaths that I want to pass to a BackgroundWorker. I essentially want the worker thread to know the strings that this ListView contains one way or another.

While tinkering with this and searching around I have tried making a public ref Class so that I can send it to the RunWorkerAsync() function, which gives me a can not convert to System::Object error:

public ref class FileInfoContainer {
public:
    cli::array<System::String^>^ filepaths;
    cli::array<System::String^>^ filenames;
    System::String^ outfile;

    FileInfoContainer(cli::array<System::String^>^ filepaths, cli::array<System::String^>^ filenames, System::String^ outfile);
};

I have also tried passing the whole Form as an argument to RunWorkerAsync() which, during debugging, indeed passes every piece of data the Form has into a System::Object. The problem is that if I try to access an element of my form through this object I get a not member of System::Object error:

private: System::Void compworker_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {
    BackgroundWorker^ worker = dynamic_cast<BackgroundWorker^>(sender);

    System::Object^ arg = e->Argument;
    arg->button1    //this fails

    MainForm form1 = (MainForm)e->Argument;  //this also fails, even though I've seen it suggested in numerous threads
}

Any good suggestions about how I can pass my arguments to the worker thread?

Tsaras
  • 455
  • 2
  • 4
  • 18

0 Answers0