【问题标题】:How do I pass a struct to a backgroundworker thread in C++/CLI如何将结构传递给 C++/CLI 中的后台工作线程
【发布时间】:2011-05-18 16:51:12
【问题描述】:
struct ArgumentList {
        int x;
        string text1;
};

/////////////////////////////////////////

ArgumentList arg1={12,"text123"}
WorkerThread->RunWorkerAsync(arg1);

我想传递 arg1 但编译器说“错误 C2664: 'void System::ComponentModel::BackgroundWorker::RunWorkerAsync(System::Object ^)' : cannot convert parameter 1 from 'ArgumentList' to 'System::对象^'"

System::Void backgroundWorker2_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {
    //Do stuff with e->Argument
    ArgumentList passedarg=(ArgumentList)e->argument; //'type cast' : cannot convert from 'System::Object ^' to 'ArgumentList'
    int y=passedarg.x
    string text2=passedarg.text1
    //...

        }

【问题讨论】:

  • 那是std::string吗?为了让BackgroundWorker 能更好地发挥作用,您需要跳过一些障碍,请考虑改用System::String^。

标签: c++-cli arguments backgroundworker


【解决方案1】:

看来您需要使用关键字 ref

将结构声明为 managed struct
ref struct ArgumentList {
        int x;
        string text1;
};

这样它将正确地从 RunWorkerAsync(Object) 期望的 Object 类型(所有 managd 类的基础对象)继承

【讨论】:

  • 这不是大多数 .NET 程序员所认为的“托管结构”。那将是“价值结构”或“价值类”。不过,在这种情况下,引用类型可能更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多