接上期鸿蒙开发-多线程并发我们继续开发work实例
worker初体验
运行结果
实现代码
WorkerPage.ets
import { worker } from '@kit.ArkTS'
@Entry
@Component
struct WorkerPage {
build() {
Column() {
Button('测试worker')
.onClick(() => {
// 创建线程
const threadWorker = new worker.ThreadWorker('../workers/Worker')
// 发送消息
threadWorker.postMessage({
sourcePath: '源路径',
zipPath: '压缩路径',
})
// 接收消息
threadWorker.onmessage = (e) => {
console.log('threadWorker onmessage: ' + JSON.stringify(e.data))
}
})
}
.height('100%')
.width('100%')
}
}
src/main/ets/workers/Worker.ets
import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';
const workerPort: ThreadWorkerGlobalScope = worker.workerPort;
/**
* 定义当工作线程接收到主线程发送的消息时调用的事件处理程序。
* 该事件处理程序在工作线程中执行。
*
* @param e 消息数据
*/
workerPort.onmessage = (e: MessageEvents) => {
console.log(`收到消息`, JSON.stringify(e))
workerPort.postMessage({ msg: '压缩成功', zipPath: e.data.zipPath })
workerPort.close()
}
/**
* 定义当工作线程接收到无法反序列化的消息时调用的事件处理程序。
* 该事件处理程序在工作线程中执行。
*
* @param e 消息数据
*/
workerPort.onmessageerror = (e: MessageEvents) => {
}
/**
* 定义当工作线程执行过程中发生异常时调用的事件处理程序。
* 该事件处理程序在工作线程中执行。
*
* @param e 错误信息
*/
workerPort.onerror = (e: ErrorEvent) => {
}