将指针传递给 Collections Vector C++/cx

Pass pointer to Collections Vector C++/cx

在标准 c++ 中,我可以创建一个向量,然后从另一个函数修改向量,如下所示:

#include <iostream>
#include <vector>
using namespace std;

void addnumber(vector<int> *testvec)
{
    testvec->push_back(4);
}
int main()
{
    vector <int> test;

    test.push_back(3);
    addnumber(&test);
    cout << test[1] << endl;
    return 0;
}

我想在 C++/CX 中使用集合向量来执行此操作。这样做的最终目标是将向量绑定到 UWP 中的 gridview 控件,并让异步任务修改它。

您将在下面找到执行此操作的示例代码。实际上,异步任务不应该修改绑定到 gridView 的矢量 - 您应该在工作线程中准备新的矢量并将其 return 到 UI 线程,然后才更新绑定到 GridView 的矢量。

此代码的作用是用四个值初始化向量,然后将其绑定到 GridView,然后创建异步任务,该任务将首先等待 5 秒以允许在屏幕上看到这四个值,然后用一个值替换所有值新.

void addnumber(Platform::Collections::Vector<int>^ testvec)
{
  testvec->Append(4);
}

Platform::Collections::Vector<int>^ vec = ref new Platform::Collections::Vector<int>();

MainPage::MainPage()
{
    InitializeComponent();

  addnumber(vec);
  addnumber(vec);
  addnumber(vec);
  addnumber(vec);

  gridView->ItemsSource = vec;

  Concurrency::create_task([]() ->Platform::Collections::Vector<int>^ {
    Concurrency::wait(5000);
    Platform::Collections::Vector<int>^ vec = ref new Platform::Collections::Vector<int>();
    addnumber(vec); 
    return vec;
  }).then([](Platform::Collections::Vector<int>^ newVec) {
    vec->Clear();
    for (auto it : newVec)
      vec->Append(it);
  }, Concurrency::task_continuation_context::use_current());
}