在标准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控件,并让异步任务对其进行修改。
答案 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());
}