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

时间:2015-11-07 20:57:50

标签: c++ windows vector uwp 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控件,并让异步任务对其进行修改。

1 个答案:

答案 0 :(得分:0)

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

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

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());
}