【发布时间】:2013-05-13 17:14:51
【问题描述】:
我有一个工作线程(pthread)在后台处理一些事情,然后我想在屏幕上显示结果。所以我必须在UI线程或主线程上执行一些代码。
在 iOS 中我可以使用 dispatch_async(dispatch_get_main_queue(), ^{ /* My code */ });
,在 Android 中我可以使用 View.queueEvent()
。谁能告诉我如何使用 BB 10 原生 SDK 做同样的事情?
谢谢,
解决方案已更新。
我终于想通了2个方法,第一个很简单,但是没用,不知道为什么。如果有人想看,我把它放在这里。
方法一。
使用bps_channel_exec
在拥有通道的线程上执行一些代码。在 UI 线程上,创建一个通道,然后将其设置为活动的。而在工作线程上,通过调用bps_channel_get_active
获取活动通道,然后使用bps_channel_exec
。但对我不起作用,继续寻找原因。
方法二。
这个方法比较复杂,但是思路很简单。在工作线程上,将事件推送到 UI 线程。在 UI 线程主循环上,添加一个事件处理程序来处理事件的种类。
在工作线程上:通过调用bps_register_domain
注册一个域,然后通过调用bps_event_create
使用该域创建一个事件。接下来,通过调用bps_channel_push_event
将事件推送到 UI 线程上的活动通道。
关于 UI 线程主循环:
for (;;) {
bps_event_t *event = NULL;
bps_get_event(&event, -1);
if (event) {
if (bps_event_get_domain(event) == the_domain_that_is_mentioned_above) {
// Handle the event
}
}
...
}
有一个很好的样本 here.
【问题讨论】:
标签: blackberry-10