首页 > 解决方案 > Backgroundworkers,表单设计器创建的对象以及如何在dowork线程中访问它们

问题描述

我正在尝试在后台执行一项任务,我正在使用表单设计器创建的面板,但我的后台工作人员不允许访问它们。

我想使用一个充满面板的数组。但我不断收到错误消息:

System.InvalidOperationException

当我尝试将它们添加到我的 cliext::vector 时。这表示我不允许使用面板,因为它是在不同的线程中创建的。

我尝试捕获异常并尝试使数组静态,但这也不起作用。还有一个使用 Invoker 的选项,但我无法让它运行。

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    backgroundWorker1->RunWorkerAsync(1);
}

private: System::Void backgroundWorker1_DoWork(System::Object^  sender, System::ComponentModel::DoWorkEventArgs^  e) {
    cliext::vector<Panel^> allePanel;
    allePanel.push_back(panel1);//1
    allePanel.push_back(panel4);//2
    allePanel.push_back(panel3);//3
}

我基本上想在无限循环中更改背景中面板的颜色。

标签: c++multithreadingclrbackgroundworker

解决方案


推荐阅读