将指针传递给 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());
}
在标准 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());
}