相关问题
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现Worker对宿主线程接口的同步调用?
1244浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13环境中Worker如何实现和宿主线程的即时消息通信?
1060浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中避免在主线程中执行耗时操作
1543浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13中如何使用TaskPool同时执行多个耗时任务?
1040浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何避免在组件的属性刷新过程中执行耗时操作?
1183浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现独立执行的耗时任务?
1159浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙开发中如何为RN框架优化线程执行?
1115浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13中启动组件时,后台应用有哪些限制?
1466浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何在鸿蒙应用开发中避免在主线程执行耗时网络请求以提高UI流畅度?
944浏览 • 0回复 待解决
#鸿蒙通关秘籍#鸿蒙系统中如何管理文件选择过程中得到的URI?
1327浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何执行创建的Task?
1272浏览 • 1回复 待解决
TaskPool在任务执行过程中如何跟主线程进行通信?如何操作同一块内存变量
3057浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何获取拖拽过程中传递的数据?
1124浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙应用中如何使用UI主线程调用多线程方法?
1419浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何实现鸿蒙API 13中EmbeddedUIExtensionAbility的生命周期管理?
2005浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中使用Swiper实现循环播放功能?
1137浏览 • 1回复 待解决
Worker的宿主线程必须是主线程吗?
1468浏览 • 1回复 待解决
#鸿蒙通关秘籍#线程模型中,主线程和TaskPool Worker线程有啥区别?
1444浏览 • 1回复 待解决
#鸿蒙通关秘籍#主线程和Worker线程在线程模型中承担什么职责?
1210浏览 • 1回复 待解决
HarmonyOS 能够在主线程给 Worker 传递一个函数,让这个函数在 Worker 的线程中执行么?
1052浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙中如何使用N-API实现线程安全的跨线程函数调用?
1492浏览 • 1回复 待解决
宿主线程如何接收子线程发送的消息?
1498浏览 • 1回复 待解决
宿主线程如何向worker子线程发送消息?
1435浏览 • 1回复 待解决
HarmonyOS taskPool执行的task内如何回调主线程的方法
1950浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙系统测试过程中如何验证日志内容的输出?
1363浏览 • 1回复 待解决





















通过Task的
sendData方法可以在任务执行过程中,实时通知宿主线程。首先在宿主线程中定义接收消息的方法:
bash // TaskSendDataUsage.ets function notice(data: number): void { console.info("子线程任务已执行完,共加载图片: ", data); }
在任务中使用
sendData发送消息:bash // TaskSendDataUsage.ets import { taskpool } from '@kit.ArkTS'; import { IconItemSource } from './IconItemSource';
@Concurrent export function loadPictureSendData(count: number): IconItemSource[] { let iconItemSourceList: IconItemSource[] = []; for (let index = 0; index < count; index++) { const numStart: number = index * 6; iconItemSourceList.push(new IconItemSource('$media:startIcon',
item${numStart + 1})); iconItemSourceList.push(new IconItemSource('$media:background',item${numStart + 2})); iconItemSourceList.push(new IconItemSource('$media:foreground',item${numStart + 3})); iconItemSourceList.push(new IconItemSource('$media:startIcon',item${numStart + 4})); iconItemSourceList.push(new IconItemSource('$media:background',item${numStart + 5})); iconItemSourceList.push(new IconItemSource('$media:foreground',item${numStart + 6}));} return iconItemSourceList; }
在主线程中注册接收消息:
bash // TaskSendDataUsage.ets @Entry @Component struct Index { @State message: string = 'Hello World';
build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() => { let iconItemSourceList: IconItemSource[]; let lodePictureTask: taskpool.Task = new taskpool.Task(loadPictureSendData, 30); lodePictureTask.onReceiveData(notice); taskpool.execute(lodePictureTask).then((res: object) => { iconItemSourceList = res as IconItemSource[]; }) }) } .width('100%') } .height('100%') } }