2017-09-16 50 views
0

我想做一個漫長的後臺操作,完成後我需要刷新的TableView大中央調度,檢查任務完成

let globalQueue = DispatchQueue.global() 
       globalQueue.async { 
        //My lengthy code 
       } 

我需要的異步任務後做這樣就完成

treeview.reloadData() 

我如何掛鉤到GCD任務完成事件?我有C#背景,我是SWIFT的新成員..請指教。

回答

3

你只需把它放在一個main隊列您的代碼之後:

let globalQueue = DispatchQueue.global() 
globalQueue.async { 
    // Your code here 
    DispatchQueue.main.async { 
     self.treeview.reloadData() 
    } 
} 
+0

是的,treeview是在我的用戶界面。 – techno

+0

其實我需要明確定義自己ie:'self.treeview.reloadData();' – techno

+0

@techno更新 – paper1111

1

我會建議使用DispatchGroup。通過一個組,您可以創建依賴關係,並在一切完成時收到通知。

// create a group to synchronize our tasks 
let group = DispatchGroup() 

// The 'enter' method increments the group's task count… 
group.enter() 
let globalQueue = DispatchQueue.global() 
globalQueue.async { 
    // my lengthy code 
    group.leave() 
} 

// closure will be called when the group's task count reaches 0 
group.notify(queue: .main) { [weak self] in 
    self?.tableView.reloadData() 
} 
+1

謝謝,但我更喜歡使用更簡單的方法.. – techno

+0

完全得到它的人。這對於在單獨的線程上執行多個任務並等待所有任務更有用。 –

+0

似乎我不能使用GCD,因爲我需要取消異步任務,當用戶點擊一個Button.Can你可以看看這裏https://stackoverflow.com/questions/46904176/dismissing-view-controller-not-stopping -async任務/ – techno