2015-11-07 19 views
0

標準C++,我可以做一個向量,這樣從另一個功能修改向量:通行證指針集合向量C++/CX

#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

最好的方法是查看uwp和C++ - cx的文檔和示例。 –

回答

0

下面你會找到一個示例代碼。實際上,異步任務不應修改綁定到gridView的向量 - 您應該在工作線程中準備新向量並將其返回給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()); 
} 
+0

謝謝。如果Vector是在像MainPage :: MainPage()這樣的函數內聲明的,它仍然可以工作嗎? – justanotherxl

+0

是的,但你必須在lambda中捕獲它。將它改爲MainPage類字段會更好。 – marcinj