1e41f4b71Sopenharmony_ci# @ohos.worker (启动一个Worker)
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ciWorker是与主线程并行的独立线程。创建Worker的线程称之为宿主线程,Worker自身的线程称之为Worker线程。创建Worker传入的url文件在Worker线程中执行,可以处理耗时操作但不可以直接操作UI。
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ciWorker主要作用是为应用程序提供一个多线程的运行环境,可满足应用程序在执行过程中与主线程分离,在后台线程中运行一个脚本操作耗时操作,极大避免类似于计算密集型或高延迟的任务阻塞主线程的运行。由于Worker一旦被创建则不会主动被销毁,若不处于任务状态一直运行,在一定程度上会造成资源的浪费,应及时关闭空闲的Worker。
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ciWorker的上下文对象和主线程的上下文对象是不同的,Worker线程不支持UI操作。
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ciWorker使用过程中的相关注意点请查[Worker注意事项](../../arkts-utils/worker-introduction.md#worker注意事项)
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci> **说明:**<br/>
12e41f4b71Sopenharmony_ci> 本模块首批接口从API version 7 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
13e41f4b71Sopenharmony_ci
14e41f4b71Sopenharmony_ci## 导入模块
15e41f4b71Sopenharmony_ci
16e41f4b71Sopenharmony_ci```ts
17e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
18e41f4b71Sopenharmony_ci```
19e41f4b71Sopenharmony_ci
20e41f4b71Sopenharmony_ci
21e41f4b71Sopenharmony_ci## 属性
22e41f4b71Sopenharmony_ci
23e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
24e41f4b71Sopenharmony_ci
25e41f4b71Sopenharmony_ci| 名称                              | 类型                                                         | 可读 | 可写 | 说明                                                         |
26e41f4b71Sopenharmony_ci| --------------------------------- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
27e41f4b71Sopenharmony_ci| workerPort<sup>9+</sup>           | [ThreadWorkerGlobalScope](#threadworkerglobalscope9)         | 是   | 是   | worker线程用于与宿主线程通信的对象。**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。                         |
28e41f4b71Sopenharmony_ci| parentPort<sup>(deprecated)</sup> | [DedicatedWorkerGlobalScope](#dedicatedworkerglobalscopedeprecated) | 是   | 是   | worker线程用于与宿主线程通信的对象。<br/>此属性从API version 7开始支持,从API version 9 开始被废弃。<br/>建议使用workerPort<sup>9+</sup>替代。 |
29e41f4b71Sopenharmony_ci
30e41f4b71Sopenharmony_ci
31e41f4b71Sopenharmony_ci## WorkerOptions
32e41f4b71Sopenharmony_ci
33e41f4b71Sopenharmony_ciWorker构造函数的选项信息,用于为Worker添加其他信息。
34e41f4b71Sopenharmony_ci
35e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ci| 名称 | 类型 | 只读 | 可选 | 说明 |
38e41f4b71Sopenharmony_ci| ---- | -------- | ---- | ---- | -------------- |
39e41f4b71Sopenharmony_ci| type | 'classic' \| 'module' | 是   | 是 | Worker执行脚本的模式类型,暂不支持module类型,默认值为"classic"。<br/>**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。 |
40e41f4b71Sopenharmony_ci| name | string   | 是   | 是 | Worker的名称,默认值为 undefined 。<br/>**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。|
41e41f4b71Sopenharmony_ci| shared | boolean | 是   | 是 | 表示Worker共享功能,此接口暂不支持。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
42e41f4b71Sopenharmony_ci
43e41f4b71Sopenharmony_ci## ThreadWorker<sup>9+</sup>
44e41f4b71Sopenharmony_ci
45e41f4b71Sopenharmony_ci使用以下方法前,均需先构造ThreadWorker实例,ThreadWorker类继承[WorkerEventTarget](#workereventtarget9)。
46e41f4b71Sopenharmony_ci
47e41f4b71Sopenharmony_ci### constructor<sup>9+</sup>
48e41f4b71Sopenharmony_ci
49e41f4b71Sopenharmony_ciconstructor(scriptURL: string, options?: WorkerOptions)
50e41f4b71Sopenharmony_ci
51e41f4b71Sopenharmony_ciThreadWorker构造函数。
52e41f4b71Sopenharmony_ci
53e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
54e41f4b71Sopenharmony_ci
55e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
56e41f4b71Sopenharmony_ci
57e41f4b71Sopenharmony_ci**参数:**
58e41f4b71Sopenharmony_ci
59e41f4b71Sopenharmony_ci| 参数名    | 类型                            | 必填 | 说明                                                         |
60e41f4b71Sopenharmony_ci| --------- | ------------------------------- | ---- | ------------------------------------------------------------ |
61e41f4b71Sopenharmony_ci| scriptURL | string                          | 是   | Worker线程文件的路径。<br/>路径规则详细参考[文件路径注意事项](../../arkts-utils/worker-introduction.md#文件路径注意事项)。 |
62e41f4b71Sopenharmony_ci| options   | [WorkerOptions](#workeroptions) | 否   | Worker构造的选项。                                           |
63e41f4b71Sopenharmony_ci
64e41f4b71Sopenharmony_ci**错误码:**
65e41f4b71Sopenharmony_ci
66e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
67e41f4b71Sopenharmony_ci
68e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 |
69e41f4b71Sopenharmony_ci| -------- | -------- |
70e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
71e41f4b71Sopenharmony_ci| 10200003 | Worker initialization failed. |
72e41f4b71Sopenharmony_ci| 10200007 | The worker file path is invalid. |
73e41f4b71Sopenharmony_ci
74e41f4b71Sopenharmony_ci**示例:**
75e41f4b71Sopenharmony_ci
76e41f4b71Sopenharmony_ci此处以在Stage模型中Ability加载Worker文件为例,使用Library加载Worker线程文件的场景参考[文件路径注意事项](../../arkts-utils/worker-introduction.md#文件路径注意事项)。
77e41f4b71Sopenharmony_ci
78e41f4b71Sopenharmony_ci```ts
79e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
80e41f4b71Sopenharmony_ci
81e41f4b71Sopenharmony_ci// 主要说明以下两种场景:
82e41f4b71Sopenharmony_ci
83e41f4b71Sopenharmony_ci// 场景1: worker文件所在路径:"entry/src/main/ets/workers/worker.ets"
84e41f4b71Sopenharmony_ciconst workerStageModel01 = new worker.ThreadWorker('entry/ets/workers/worker.ets', {name:"first worker in Stage model"});
85e41f4b71Sopenharmony_ci
86e41f4b71Sopenharmony_ci// 场景2: worker文件所在路径:"phone/src/main/ets/ThreadFile/workers/worker.ets"
87e41f4b71Sopenharmony_ciconst workerStageModel02 = new worker.ThreadWorker('phone/ets/ThreadFile/workers/worker.ets');
88e41f4b71Sopenharmony_ci```
89e41f4b71Sopenharmony_ci
90e41f4b71Sopenharmony_ci
91e41f4b71Sopenharmony_ci### postMessage<sup>9+</sup>
92e41f4b71Sopenharmony_ci
93e41f4b71Sopenharmony_cipostMessage(message: Object, transfer: ArrayBuffer[]): void
94e41f4b71Sopenharmony_ci
95e41f4b71Sopenharmony_ci宿主线程通过转移对象所有权的方式向Worker线程发送消息。
96e41f4b71Sopenharmony_ci
97e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
98e41f4b71Sopenharmony_ci
99e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
100e41f4b71Sopenharmony_ci
101e41f4b71Sopenharmony_ci**参数:**
102e41f4b71Sopenharmony_ci
103e41f4b71Sopenharmony_ci| 参数名   | 类型          | 必填 | 说明                                                         |
104e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------------------ |
105e41f4b71Sopenharmony_ci| message  | Object        | 是   | 发送至Worker的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 |
106e41f4b71Sopenharmony_ci| transfer | ArrayBuffer[] | 是   | 表示可转移的ArrayBuffer实例对象数组,该数组中对象的所有权会被转移到Worker线程,在宿主线程中将会变为不可用,仅在Worker线程中可用,数组不可传入null。 |
107e41f4b71Sopenharmony_ci
108e41f4b71Sopenharmony_ci**错误码:**
109e41f4b71Sopenharmony_ci
110e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
111e41f4b71Sopenharmony_ci
112e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                |
113e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- |
114e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
115e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.           |
116e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. |
117e41f4b71Sopenharmony_ci
118e41f4b71Sopenharmony_ci**示例:**
119e41f4b71Sopenharmony_ci
120e41f4b71Sopenharmony_ci```ts
121e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
122e41f4b71Sopenharmony_ci
123e41f4b71Sopenharmony_cilet buffer = new ArrayBuffer(8);
124e41f4b71Sopenharmony_ciworkerInstance.postMessage(buffer, [buffer]);
125e41f4b71Sopenharmony_ci```
126e41f4b71Sopenharmony_ci
127e41f4b71Sopenharmony_ci### postMessage<sup>9+</sup>
128e41f4b71Sopenharmony_ci
129e41f4b71Sopenharmony_cipostMessage(message: Object, options?: PostMessageOptions): void
130e41f4b71Sopenharmony_ci
131e41f4b71Sopenharmony_ci宿主线程通过转移对象所有权或者拷贝数据的方式向Worker线程发送消息。
132e41f4b71Sopenharmony_ci
133e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
134e41f4b71Sopenharmony_ci
135e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
136e41f4b71Sopenharmony_ci
137e41f4b71Sopenharmony_ci**参数:**
138e41f4b71Sopenharmony_ci
139e41f4b71Sopenharmony_ci| 参数名  | 类型                                      | 必填 | 说明                                                         |
140e41f4b71Sopenharmony_ci| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
141e41f4b71Sopenharmony_ci| message | Object                                    | 是   | 发送至Worker的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 |
142e41f4b71Sopenharmony_ci| options | [PostMessageOptions](#postmessageoptions) | 否   | 当填入该参数时,与传入ArrayBuffer[]的作用一致,该数组中对象的所有权会被转移到Worker线程,在宿主线程中将会变为不可用,仅在Worker线程中可用。<br>若不填入该参数,默认设置为 undefined,通过拷贝数据的方式传输信息到Worker线程。 |
143e41f4b71Sopenharmony_ci
144e41f4b71Sopenharmony_ci**错误码:**
145e41f4b71Sopenharmony_ci
146e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
147e41f4b71Sopenharmony_ci
148e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                |
149e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- |
150e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
151e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.           |
152e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. |
153e41f4b71Sopenharmony_ci
154e41f4b71Sopenharmony_ci**示例:**
155e41f4b71Sopenharmony_ci
156e41f4b71Sopenharmony_ci```ts
157e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
158e41f4b71Sopenharmony_ci
159e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world");
160e41f4b71Sopenharmony_ci
161e41f4b71Sopenharmony_cilet buffer = new ArrayBuffer(8);
162e41f4b71Sopenharmony_ciworkerInstance.postMessage(buffer, [buffer]);
163e41f4b71Sopenharmony_ci```
164e41f4b71Sopenharmony_ci
165e41f4b71Sopenharmony_ci
166e41f4b71Sopenharmony_ci### postMessageWithSharedSendable<sup>12+</sup>
167e41f4b71Sopenharmony_ci
168e41f4b71Sopenharmony_cipostMessageWithSharedSendable(message: Object, transfer?: ArrayBuffer[]): void
169e41f4b71Sopenharmony_ci
170e41f4b71Sopenharmony_ci宿主线程向Worker线程发送消息,消息中的Sendable对象通过引用传递,消息中的非Sendable对象通过序列化传递。
171e41f4b71Sopenharmony_ci
172e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。
173e41f4b71Sopenharmony_ci
174e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
175e41f4b71Sopenharmony_ci
176e41f4b71Sopenharmony_ci**参数:**
177e41f4b71Sopenharmony_ci
178e41f4b71Sopenharmony_ci| 参数名  | 类型                                      | 必填 | 说明                                                         |
179e41f4b71Sopenharmony_ci| --------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
180e41f4b71Sopenharmony_ci| message   | Object	     | 是   | 发送至Worker的数据,该数据对象必须是可序列化或可共享,序列化支持类型见[序列化类型说明](#序列化支持类型),共享支持类型见[Sendable支持的数据类型](../../arkts-utils/sendable-overview.md#sendable支持的数据类型)。 |
181e41f4b71Sopenharmony_ci| transfer  | ArrayBuffer[] | 否   | 表示可转移的ArrayBuffer实例对象数组,该数组中对象的所有权会被转移到Worker线程,在宿主线程中将会变为不可用,仅在Worker线程中可用,数组不可传入null。默认值为空数组。 |
182e41f4b71Sopenharmony_ci
183e41f4b71Sopenharmony_ci**错误码:**
184e41f4b71Sopenharmony_ci
185e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
186e41f4b71Sopenharmony_ci
187e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                |
188e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- |
189e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
190e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.           |
191e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. |
192e41f4b71Sopenharmony_ci
193e41f4b71Sopenharmony_ci**示例:**
194e41f4b71Sopenharmony_ci
195e41f4b71Sopenharmony_ci<!--code_no_check-->
196e41f4b71Sopenharmony_ci```ts
197e41f4b71Sopenharmony_ci// index.ets
198e41f4b71Sopenharmony_ci// 新建SendableObject实例并通过宿主线程传递至worker线程
199e41f4b71Sopenharmony_ci
200e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
201e41f4b71Sopenharmony_ciimport { SendableObject } from './sendable'
202e41f4b71Sopenharmony_ci
203e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/Worker.ets");
204e41f4b71Sopenharmony_cilet object: SendableObject = new SendableObject();
205e41f4b71Sopenharmony_ciworkerInstance.postMessageWithSharedSendable(object);
206e41f4b71Sopenharmony_ci```
207e41f4b71Sopenharmony_ci
208e41f4b71Sopenharmony_ci```ts
209e41f4b71Sopenharmony_ci// sendable.ets
210e41f4b71Sopenharmony_ci// 定义SendableObject
211e41f4b71Sopenharmony_ci
212e41f4b71Sopenharmony_ci@Sendable
213e41f4b71Sopenharmony_ciexport class SendableObject {
214e41f4b71Sopenharmony_ci  a:number = 45;
215e41f4b71Sopenharmony_ci}
216e41f4b71Sopenharmony_ci```
217e41f4b71Sopenharmony_ci
218e41f4b71Sopenharmony_ci<!--code_no_check-->
219e41f4b71Sopenharmony_ci```ts
220e41f4b71Sopenharmony_ci// worker文件路径为:entry/src/main/ets/workers/Worker.ets
221e41f4b71Sopenharmony_ci// Worker.ets
222e41f4b71Sopenharmony_ci// 接收宿主线程传递至worker线程的数据并访问
223e41f4b71Sopenharmony_ci
224e41f4b71Sopenharmony_ciimport { SendableObject } from '../pages/sendable'
225e41f4b71Sopenharmony_ciimport { worker, ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@kit.ArkTS';
226e41f4b71Sopenharmony_ci
227e41f4b71Sopenharmony_ciconst workerPort: ThreadWorkerGlobalScope = worker.workerPort;
228e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents) => {
229e41f4b71Sopenharmony_ci  let obj: SendableObject = e.data;
230e41f4b71Sopenharmony_ci  console.info("sendable obj is: " + obj.a);
231e41f4b71Sopenharmony_ci}
232e41f4b71Sopenharmony_ci```
233e41f4b71Sopenharmony_ci
234e41f4b71Sopenharmony_ci
235e41f4b71Sopenharmony_ci### on<sup>9+</sup>
236e41f4b71Sopenharmony_ci
237e41f4b71Sopenharmony_cion(type: string, listener: WorkerEventListener): void
238e41f4b71Sopenharmony_ci
239e41f4b71Sopenharmony_ci向Worker添加一个事件监听,该接口与[addEventListener<sup>9+</sup>](#addeventlistener9)接口功能一致。
240e41f4b71Sopenharmony_ci
241e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
242e41f4b71Sopenharmony_ci
243e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
244e41f4b71Sopenharmony_ci
245e41f4b71Sopenharmony_ci**参数:**
246e41f4b71Sopenharmony_ci
247e41f4b71Sopenharmony_ci| 参数名   | 类型                                         | 必填 | 说明                   |
248e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------------- |
249e41f4b71Sopenharmony_ci| type     | string                                       | 是   | 监听的事件类型。       |
250e41f4b71Sopenharmony_ci| listener | [WorkerEventListener](#workereventlistener9) | 是 | 回调的事件。 |
251e41f4b71Sopenharmony_ci
252e41f4b71Sopenharmony_ci**错误码:**
253e41f4b71Sopenharmony_ci
254e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
255e41f4b71Sopenharmony_ci
256e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                   |
257e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- |
258e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
259e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running.              |
260e41f4b71Sopenharmony_ci| 10200005 | The invoked API is not supported in workers. |
261e41f4b71Sopenharmony_ci
262e41f4b71Sopenharmony_ci**示例:**
263e41f4b71Sopenharmony_ci
264e41f4b71Sopenharmony_ci```ts
265e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
266e41f4b71Sopenharmony_ciworkerInstance.on("alert", (e)=>{
267e41f4b71Sopenharmony_ci    console.log("alert listener callback");
268e41f4b71Sopenharmony_ci})
269e41f4b71Sopenharmony_ci```
270e41f4b71Sopenharmony_ci
271e41f4b71Sopenharmony_ci
272e41f4b71Sopenharmony_ci### once<sup>9+</sup>
273e41f4b71Sopenharmony_ci
274e41f4b71Sopenharmony_cionce(type: string, listener: WorkerEventListener): void
275e41f4b71Sopenharmony_ci
276e41f4b71Sopenharmony_ci向Worker添加一个事件监听,事件监听只执行一次便自动删除。
277e41f4b71Sopenharmony_ci
278e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
279e41f4b71Sopenharmony_ci
280e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
281e41f4b71Sopenharmony_ci
282e41f4b71Sopenharmony_ci**参数:**
283e41f4b71Sopenharmony_ci
284e41f4b71Sopenharmony_ci| 参数名   | 类型                                         | 必填 | 说明                   |
285e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------------- |
286e41f4b71Sopenharmony_ci| type     | string                                       | 是   | 监听的事件类型。       |
287e41f4b71Sopenharmony_ci| listener | [WorkerEventListener](#workereventlistener9) | 是 | 回调的事件。 |
288e41f4b71Sopenharmony_ci
289e41f4b71Sopenharmony_ci**错误码:**
290e41f4b71Sopenharmony_ci
291e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
292e41f4b71Sopenharmony_ci
293e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                   |
294e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- |
295e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
296e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running.              |
297e41f4b71Sopenharmony_ci| 10200005 | The invoked API is not supported in workers. |
298e41f4b71Sopenharmony_ci
299e41f4b71Sopenharmony_ci**示例:**
300e41f4b71Sopenharmony_ci
301e41f4b71Sopenharmony_ci```ts
302e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
303e41f4b71Sopenharmony_ciworkerInstance.once("alert", (e)=>{
304e41f4b71Sopenharmony_ci    console.log("alert listener callback");
305e41f4b71Sopenharmony_ci})
306e41f4b71Sopenharmony_ci```
307e41f4b71Sopenharmony_ci
308e41f4b71Sopenharmony_ci
309e41f4b71Sopenharmony_ci### off<sup>9+</sup>
310e41f4b71Sopenharmony_ci
311e41f4b71Sopenharmony_cioff(type: string, listener?: WorkerEventListener): void
312e41f4b71Sopenharmony_ci
313e41f4b71Sopenharmony_ci删除类型为type的事件监听,该接口与[removeEventListener<sup>9+</sup>](#removeeventlistener9)接口功能一致。
314e41f4b71Sopenharmony_ci
315e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
316e41f4b71Sopenharmony_ci
317e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
318e41f4b71Sopenharmony_ci
319e41f4b71Sopenharmony_ci**参数:**
320e41f4b71Sopenharmony_ci
321e41f4b71Sopenharmony_ci| 参数名   | 类型                                         | 必填 | 说明                         |
322e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------------------- |
323e41f4b71Sopenharmony_ci| type     | string                                       | 是   | 需要删除的事件类型。         |
324e41f4b71Sopenharmony_ci| listener | [WorkerEventListener](#workereventlistener9) | 否 | 删除监听事件后所执行的回调事件。 |
325e41f4b71Sopenharmony_ci
326e41f4b71Sopenharmony_ci**错误码:**
327e41f4b71Sopenharmony_ci
328e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
329e41f4b71Sopenharmony_ci
330e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                   |
331e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- |
332e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
333e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running.              |
334e41f4b71Sopenharmony_ci| 10200005 | The invoked API is not supported in workers. |
335e41f4b71Sopenharmony_ci
336e41f4b71Sopenharmony_ci**示例:**
337e41f4b71Sopenharmony_ci
338e41f4b71Sopenharmony_ci```ts
339e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
340e41f4b71Sopenharmony_ci//使用on接口、once接口或addEventListener接口创建“alert”事件,使用off接口删除事件。
341e41f4b71Sopenharmony_ciworkerInstance.off("alert");
342e41f4b71Sopenharmony_ci```
343e41f4b71Sopenharmony_ci
344e41f4b71Sopenharmony_ci### registerGlobalCallObject<sup>11+</sup>
345e41f4b71Sopenharmony_ci
346e41f4b71Sopenharmony_ciregisterGlobalCallObject(instanceName: string, globalCallObject: Object): void
347e41f4b71Sopenharmony_ci
348e41f4b71Sopenharmony_ci在宿主线程的ThreadWorker实例上注册一个对象,该对象上的方法可以在Worker线程中被调用,详细介绍请参见[callGlobalCallObjectMethod](#callglobalcallobjectmethod11)。
349e41f4b71Sopenharmony_ci
350e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
351e41f4b71Sopenharmony_ci
352e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
353e41f4b71Sopenharmony_ci
354e41f4b71Sopenharmony_ci**参数:**
355e41f4b71Sopenharmony_ci
356e41f4b71Sopenharmony_ci| 参数名   | 类型          | 必填 | 说明                                                         |
357e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------------------ |
358e41f4b71Sopenharmony_ci| instanceName  | string        | 是   | 注册对象时使用的键,调用时可以通过该键值找到相对应的被注册的对象。 |
359e41f4b71Sopenharmony_ci| globalCallObject | Object | 是   | 被注册的对象,ThreadWorker实例会持有被注册对象的强引用。 |
360e41f4b71Sopenharmony_ci
361e41f4b71Sopenharmony_ci**错误码:**
362e41f4b71Sopenharmony_ci
363e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
364e41f4b71Sopenharmony_ci
365e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                |
366e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- |
367e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
368e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running.           |
369e41f4b71Sopenharmony_ci
370e41f4b71Sopenharmony_ci**示例:**
371e41f4b71Sopenharmony_ci```ts
372e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
373e41f4b71Sopenharmony_ciclass TestObj {
374e41f4b71Sopenharmony_ci  private message : string = "this is a message from TestObj"
375e41f4b71Sopenharmony_ci  public getMessage() : string {
376e41f4b71Sopenharmony_ci    return this.message;
377e41f4b71Sopenharmony_ci  }
378e41f4b71Sopenharmony_ci  public getMessageWithInput(str : string) : string {
379e41f4b71Sopenharmony_ci    return this.message + " with input: " + str;
380e41f4b71Sopenharmony_ci  }
381e41f4b71Sopenharmony_ci}
382e41f4b71Sopenharmony_cilet registerObj = new TestObj();
383e41f4b71Sopenharmony_ci// 在ThreadWorker实例上注册registerObj
384e41f4b71Sopenharmony_ciworkerInstance.registerGlobalCallObject("myObj", registerObj);
385e41f4b71Sopenharmony_ciworkerInstance.postMessage("start worker")
386e41f4b71Sopenharmony_ci```
387e41f4b71Sopenharmony_ci
388e41f4b71Sopenharmony_ci### unregisterGlobalCallObject<sup>11+</sup>
389e41f4b71Sopenharmony_ci
390e41f4b71Sopenharmony_ciunregisterGlobalCallObject(instanceName?: string): void
391e41f4b71Sopenharmony_ci
392e41f4b71Sopenharmony_ci取消在宿主线程ThreadWorker实例上注册的对象,该方法会释放ThreadWorker实例中与该键相匹配对象的强引用,没有匹配对象时不会报错。
393e41f4b71Sopenharmony_ci
394e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
395e41f4b71Sopenharmony_ci
396e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
397e41f4b71Sopenharmony_ci
398e41f4b71Sopenharmony_ci**参数:**
399e41f4b71Sopenharmony_ci
400e41f4b71Sopenharmony_ci| 参数名   | 类型          | 必填 | 说明                                                         |
401e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------------------ |
402e41f4b71Sopenharmony_ci| instanceName  | string        | 否   | 注册对象时使用的键,此参数不填时,会释放ThreadWorker实例中所有已注册的对象。 |
403e41f4b71Sopenharmony_ci
404e41f4b71Sopenharmony_ci**错误码:**
405e41f4b71Sopenharmony_ci
406e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
407e41f4b71Sopenharmony_ci
408e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                |
409e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- |
410e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
411e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. |
412e41f4b71Sopenharmony_ci
413e41f4b71Sopenharmony_ci**示例:**
414e41f4b71Sopenharmony_ci```ts
415e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
416e41f4b71Sopenharmony_ciclass TestObj {
417e41f4b71Sopenharmony_ci  private message : string = "this is a message from TestObj"
418e41f4b71Sopenharmony_ci  public getMessage() : string {
419e41f4b71Sopenharmony_ci    return this.message;
420e41f4b71Sopenharmony_ci  }
421e41f4b71Sopenharmony_ci  public getMessageWithInput(str : string) : string {
422e41f4b71Sopenharmony_ci    return this.message + " with input: " + str;
423e41f4b71Sopenharmony_ci  }
424e41f4b71Sopenharmony_ci}
425e41f4b71Sopenharmony_cilet registerObj = new TestObj();
426e41f4b71Sopenharmony_ciworkerInstance.registerGlobalCallObject("myObj", registerObj);
427e41f4b71Sopenharmony_ci// 取消对象注册
428e41f4b71Sopenharmony_ciworkerInstance.unregisterGlobalCallObject("myObj");
429e41f4b71Sopenharmony_ci// 取消ThreadWorker实例上的所有对象注册
430e41f4b71Sopenharmony_ci//workerInstance.unregisterGlobalCallObject();
431e41f4b71Sopenharmony_ciworkerInstance.postMessage("start worker")
432e41f4b71Sopenharmony_ci```
433e41f4b71Sopenharmony_ci
434e41f4b71Sopenharmony_ci### terminate<sup>9+</sup>
435e41f4b71Sopenharmony_ci
436e41f4b71Sopenharmony_citerminate(): void
437e41f4b71Sopenharmony_ci
438e41f4b71Sopenharmony_ci销毁Worker线程,终止Worker接收消息。
439e41f4b71Sopenharmony_ci
440e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
441e41f4b71Sopenharmony_ci
442e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
443e41f4b71Sopenharmony_ci
444e41f4b71Sopenharmony_ci**错误码:**
445e41f4b71Sopenharmony_ci
446e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
447e41f4b71Sopenharmony_ci
448e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                      |
449e41f4b71Sopenharmony_ci| -------- | ------------------------------- |
450e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. |
451e41f4b71Sopenharmony_ci
452e41f4b71Sopenharmony_ci**示例:**
453e41f4b71Sopenharmony_ci
454e41f4b71Sopenharmony_ci```ts
455e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
456e41f4b71Sopenharmony_ciworkerInstance.terminate();
457e41f4b71Sopenharmony_ci```
458e41f4b71Sopenharmony_ci
459e41f4b71Sopenharmony_ci
460e41f4b71Sopenharmony_ci### onexit<sup>9+</sup>
461e41f4b71Sopenharmony_ci
462e41f4b71Sopenharmony_cionexit?: (code: number) =&gt; void
463e41f4b71Sopenharmony_ci
464e41f4b71Sopenharmony_ci回调函数。表示Worker销毁时被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中code类型为number,异常退出为1,正常退出为0。
465e41f4b71Sopenharmony_ci
466e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
467e41f4b71Sopenharmony_ci
468e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
469e41f4b71Sopenharmony_ci
470e41f4b71Sopenharmony_ci**错误码:**
471e41f4b71Sopenharmony_ci
472e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
473e41f4b71Sopenharmony_ci
474e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                   |
475e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- |
476e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1.Incorrect parameter types. |
477e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.              |
478e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. |
479e41f4b71Sopenharmony_ci
480e41f4b71Sopenharmony_ci**示例:**
481e41f4b71Sopenharmony_ci
482e41f4b71Sopenharmony_ci```ts
483e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
484e41f4b71Sopenharmony_ciworkerInstance.onexit = (code) => {
485e41f4b71Sopenharmony_ci console.log("onexit");
486e41f4b71Sopenharmony_ci}
487e41f4b71Sopenharmony_ci
488e41f4b71Sopenharmony_ci//onexit被执行两种方式:
489e41f4b71Sopenharmony_ci// main thread:
490e41f4b71Sopenharmony_ciworkerInstance.terminate();
491e41f4b71Sopenharmony_ci
492e41f4b71Sopenharmony_ci// worker线程:
493e41f4b71Sopenharmony_ci//workerPort.close()
494e41f4b71Sopenharmony_ci```
495e41f4b71Sopenharmony_ci
496e41f4b71Sopenharmony_ci
497e41f4b71Sopenharmony_ci### onerror<sup>9+</sup>
498e41f4b71Sopenharmony_ci
499e41f4b71Sopenharmony_cionerror?: (err: ErrorEvent) =&gt; void
500e41f4b71Sopenharmony_ci
501e41f4b71Sopenharmony_ci回调函数。表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中err类型为[ErrorEvent](#errorevent),表示收到的异常数据。
502e41f4b71Sopenharmony_ci
503e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
504e41f4b71Sopenharmony_ci
505e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
506e41f4b71Sopenharmony_ci
507e41f4b71Sopenharmony_ci**错误码:**
508e41f4b71Sopenharmony_ci
509e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
510e41f4b71Sopenharmony_ci
511e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                   |
512e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- |
513e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1.Incorrect parameter types. |
514e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.              |
515e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. |
516e41f4b71Sopenharmony_ci
517e41f4b71Sopenharmony_ci**示例:**
518e41f4b71Sopenharmony_ci
519e41f4b71Sopenharmony_ci```ts
520e41f4b71Sopenharmony_ciimport { worker, ErrorEvent } from '@kit.ArkTS';
521e41f4b71Sopenharmony_ci
522e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
523e41f4b71Sopenharmony_ciworkerInstance.onerror = (err: ErrorEvent) => {
524e41f4b71Sopenharmony_ci  console.log("onerror" + err.message);
525e41f4b71Sopenharmony_ci}
526e41f4b71Sopenharmony_ci```
527e41f4b71Sopenharmony_ci
528e41f4b71Sopenharmony_ci
529e41f4b71Sopenharmony_ci### onmessage<sup>9+</sup>
530e41f4b71Sopenharmony_ci
531e41f4b71Sopenharmony_cionmessage?: (event: MessageEvents) =&gt; void
532e41f4b71Sopenharmony_ci
533e41f4b71Sopenharmony_ci回调函数。表示宿主线程接收到来自其创建的Worker通过workerPort.postMessage接口发送的消息时被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中event类型为[MessageEvents](#messageevents9),表示收到的Worker消息数据。
534e41f4b71Sopenharmony_ci
535e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
536e41f4b71Sopenharmony_ci
537e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
538e41f4b71Sopenharmony_ci
539e41f4b71Sopenharmony_ci**错误码:**
540e41f4b71Sopenharmony_ci
541e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
542e41f4b71Sopenharmony_ci
543e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                   |
544e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- |
545e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1.Incorrect parameter types. |
546e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.              |
547e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. |
548e41f4b71Sopenharmony_ci
549e41f4b71Sopenharmony_ci**示例:**
550e41f4b71Sopenharmony_ci
551e41f4b71Sopenharmony_ci```ts
552e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
553e41f4b71Sopenharmony_ci
554e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
555e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => {
556e41f4b71Sopenharmony_ci // e : MessageEvents, 用法如下:
557e41f4b71Sopenharmony_ci // let data = e.data;
558e41f4b71Sopenharmony_ci console.log("onmessage");
559e41f4b71Sopenharmony_ci}
560e41f4b71Sopenharmony_ci```
561e41f4b71Sopenharmony_ci
562e41f4b71Sopenharmony_ci
563e41f4b71Sopenharmony_ci### onmessageerror<sup>9+</sup>
564e41f4b71Sopenharmony_ci
565e41f4b71Sopenharmony_cionmessageerror?: (event: MessageEvents) =&gt; void
566e41f4b71Sopenharmony_ci
567e41f4b71Sopenharmony_ci回调函数。表示当Worker对象接收到一条无法被序列化的消息时被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中event类型为[MessageEvents](#messageevents9),表示收到的Worker消息数据。
568e41f4b71Sopenharmony_ci
569e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
570e41f4b71Sopenharmony_ci
571e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
572e41f4b71Sopenharmony_ci
573e41f4b71Sopenharmony_ci**错误码:**
574e41f4b71Sopenharmony_ci
575e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
576e41f4b71Sopenharmony_ci
577e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                   |
578e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- |
579e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1.Incorrect parameter types. |
580e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.              |
581e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. |
582e41f4b71Sopenharmony_ci
583e41f4b71Sopenharmony_ci**示例:**
584e41f4b71Sopenharmony_ci
585e41f4b71Sopenharmony_ci```ts
586e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
587e41f4b71Sopenharmony_ci
588e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
589e41f4b71Sopenharmony_ciworkerInstance.onmessageerror = (err: MessageEvents) => {
590e41f4b71Sopenharmony_ci  console.log("onmessageerror");
591e41f4b71Sopenharmony_ci}
592e41f4b71Sopenharmony_ci```
593e41f4b71Sopenharmony_ci
594e41f4b71Sopenharmony_ci### addEventListener<sup>9+</sup>
595e41f4b71Sopenharmony_ci
596e41f4b71Sopenharmony_ciaddEventListener(type: string, listener: WorkerEventListener): void
597e41f4b71Sopenharmony_ci
598e41f4b71Sopenharmony_ci向Worker添加一个事件监听,该接口与[on<sup>9+</sup>](#on9)接口功能一致。
599e41f4b71Sopenharmony_ci
600e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
601e41f4b71Sopenharmony_ci
602e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
603e41f4b71Sopenharmony_ci
604e41f4b71Sopenharmony_ci**参数:**
605e41f4b71Sopenharmony_ci
606e41f4b71Sopenharmony_ci| 参数名   | 类型                                         | 必填 | 说明             |
607e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------- |
608e41f4b71Sopenharmony_ci| type     | string                                       | 是   | 监听的事件类型。 |
609e41f4b71Sopenharmony_ci| listener | [WorkerEventListener](#workereventlistener9) | 是   | 回调的事件。     |
610e41f4b71Sopenharmony_ci
611e41f4b71Sopenharmony_ci**错误码:**
612e41f4b71Sopenharmony_ci
613e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
614e41f4b71Sopenharmony_ci
615e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                   |
616e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- |
617e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
618e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running.              |
619e41f4b71Sopenharmony_ci| 10200005 | The invoked API is not supported in workers. |
620e41f4b71Sopenharmony_ci
621e41f4b71Sopenharmony_ci**示例:**
622e41f4b71Sopenharmony_ci
623e41f4b71Sopenharmony_ci```ts
624e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
625e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{
626e41f4b71Sopenharmony_ci    console.log("alert listener callback");
627e41f4b71Sopenharmony_ci})
628e41f4b71Sopenharmony_ci```
629e41f4b71Sopenharmony_ci
630e41f4b71Sopenharmony_ci
631e41f4b71Sopenharmony_ci### removeEventListener<sup>9+</sup>
632e41f4b71Sopenharmony_ci
633e41f4b71Sopenharmony_ciremoveEventListener(type: string, callback?: WorkerEventListener): void
634e41f4b71Sopenharmony_ci
635e41f4b71Sopenharmony_ci删除Worker的事件监听,该接口与[off<sup>9+</sup>](#off9)接口功能一致。
636e41f4b71Sopenharmony_ci
637e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
638e41f4b71Sopenharmony_ci
639e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
640e41f4b71Sopenharmony_ci
641e41f4b71Sopenharmony_ci**参数:**
642e41f4b71Sopenharmony_ci
643e41f4b71Sopenharmony_ci| 参数名   | 类型                                         | 必填 | 说明                         |
644e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------------------- |
645e41f4b71Sopenharmony_ci| type     | string                                       | 是   | 需要删除的监听事件类型。     |
646e41f4b71Sopenharmony_ci| callback | [WorkerEventListener](#workereventlistener9) | 否 | 删除监听事件后所执行的回调事件。 |
647e41f4b71Sopenharmony_ci
648e41f4b71Sopenharmony_ci**错误码:**
649e41f4b71Sopenharmony_ci
650e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
651e41f4b71Sopenharmony_ci
652e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                      |
653e41f4b71Sopenharmony_ci| -------- | ------------------------------- |
654e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
655e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. |
656e41f4b71Sopenharmony_ci
657e41f4b71Sopenharmony_ci**示例:**
658e41f4b71Sopenharmony_ci
659e41f4b71Sopenharmony_ci```ts
660e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
661e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{
662e41f4b71Sopenharmony_ci    console.log("alert listener callback");
663e41f4b71Sopenharmony_ci})
664e41f4b71Sopenharmony_ciworkerInstance.removeEventListener("alert");
665e41f4b71Sopenharmony_ci```
666e41f4b71Sopenharmony_ci
667e41f4b71Sopenharmony_ci
668e41f4b71Sopenharmony_ci### dispatchEvent<sup>9+</sup>
669e41f4b71Sopenharmony_ci
670e41f4b71Sopenharmony_cidispatchEvent(event: Event): boolean
671e41f4b71Sopenharmony_ci
672e41f4b71Sopenharmony_ci分发定义在Worker的事件。
673e41f4b71Sopenharmony_ci
674e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
675e41f4b71Sopenharmony_ci
676e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
677e41f4b71Sopenharmony_ci
678e41f4b71Sopenharmony_ci**参数:**
679e41f4b71Sopenharmony_ci
680e41f4b71Sopenharmony_ci| 参数名 | 类型            | 必填 | 说明             |
681e41f4b71Sopenharmony_ci| ------ | --------------- | ---- | ---------------- |
682e41f4b71Sopenharmony_ci| event  | [Event](#event) | 是   | 需要分发的事件。 |
683e41f4b71Sopenharmony_ci
684e41f4b71Sopenharmony_ci**返回值:**
685e41f4b71Sopenharmony_ci
686e41f4b71Sopenharmony_ci| 类型    | 说明                            |
687e41f4b71Sopenharmony_ci| ------- | ------------------------------- |
688e41f4b71Sopenharmony_ci| boolean | 分发的结果,true表示分发成功,false表示分发失败。 |
689e41f4b71Sopenharmony_ci
690e41f4b71Sopenharmony_ci**错误码:**
691e41f4b71Sopenharmony_ci
692e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
693e41f4b71Sopenharmony_ci
694e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                      |
695e41f4b71Sopenharmony_ci| -------- | ------------------------------- |
696e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
697e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. |
698e41f4b71Sopenharmony_ci
699e41f4b71Sopenharmony_ci**示例:**
700e41f4b71Sopenharmony_ci
701e41f4b71Sopenharmony_ci```ts
702e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
703e41f4b71Sopenharmony_ci
704e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"eventType", timeStamp:0}); //timeStamp暂未支持。
705e41f4b71Sopenharmony_ci```
706e41f4b71Sopenharmony_ci
707e41f4b71Sopenharmony_ci分发事件(dispatchEvent)可与监听接口(on、once、addEventListener)搭配使用,示例如下:
708e41f4b71Sopenharmony_ci
709e41f4b71Sopenharmony_ci```ts
710e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
711e41f4b71Sopenharmony_ci
712e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
713e41f4b71Sopenharmony_ci
714e41f4b71Sopenharmony_ci//用法一:
715e41f4b71Sopenharmony_ciworkerInstance.on("alert_on", (e)=>{
716e41f4b71Sopenharmony_ci    console.log("alert listener callback");
717e41f4b71Sopenharmony_ci})
718e41f4b71Sopenharmony_ciworkerInstance.once("alert_once", (e)=>{
719e41f4b71Sopenharmony_ci    console.log("alert listener callback");
720e41f4b71Sopenharmony_ci})
721e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert_add", (e)=>{
722e41f4b71Sopenharmony_ci    console.log("alert listener callback");
723e41f4b71Sopenharmony_ci})
724e41f4b71Sopenharmony_ci
725e41f4b71Sopenharmony_ci//once接口创建的事件执行一次便会删除。
726e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_once", timeStamp:0});//timeStamp暂未支持。
727e41f4b71Sopenharmony_ci//on接口创建的事件可以一直被分发,不能主动删除。
728e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_on", timeStamp:0});
729e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_on", timeStamp:0});
730e41f4b71Sopenharmony_ci//addEventListener接口创建的事件可以一直被分发,不能主动删除。
731e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_add", timeStamp:0});
732e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_add", timeStamp:0});
733e41f4b71Sopenharmony_ci
734e41f4b71Sopenharmony_ci//用法二:
735e41f4b71Sopenharmony_ci//event类型的type支持自定义,同时存在"message"/"messageerror"/"error"特殊类型,如下所示
736e41f4b71Sopenharmony_ci//当type = "message",onmessage接口定义的方法同时会执行。
737e41f4b71Sopenharmony_ci//当type = "messageerror",onmessageerror接口定义的方法同时会执行。
738e41f4b71Sopenharmony_ci//当type = "error",onerror接口定义的方法同时会执行。
739e41f4b71Sopenharmony_ci//若调用removeEventListener接口或者off接口取消事件时,能且只能取消使用addEventListener/on/once创建的事件。
740e41f4b71Sopenharmony_ci
741e41f4b71Sopenharmony_ciworkerInstance.addEventListener("message", (e)=>{
742e41f4b71Sopenharmony_ci    console.log("message listener callback");
743e41f4b71Sopenharmony_ci})
744e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => {
745e41f4b71Sopenharmony_ci    console.log("onmessage : message listener callback");
746e41f4b71Sopenharmony_ci}
747e41f4b71Sopenharmony_ci//调用dispatchEvent分发“message”事件,addEventListener和onmessage中定义的方法都会被执行。
748e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"message", timeStamp:0});
749e41f4b71Sopenharmony_ci```
750e41f4b71Sopenharmony_ci
751e41f4b71Sopenharmony_ci
752e41f4b71Sopenharmony_ci### removeAllListener<sup>9+</sup>
753e41f4b71Sopenharmony_ci
754e41f4b71Sopenharmony_ciremoveAllListener(): void
755e41f4b71Sopenharmony_ci
756e41f4b71Sopenharmony_ci删除Worker所有的事件监听。
757e41f4b71Sopenharmony_ci
758e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
759e41f4b71Sopenharmony_ci
760e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
761e41f4b71Sopenharmony_ci
762e41f4b71Sopenharmony_ci**错误码:**
763e41f4b71Sopenharmony_ci
764e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
765e41f4b71Sopenharmony_ci
766e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                      |
767e41f4b71Sopenharmony_ci| -------- | ------------------------------- |
768e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running. |
769e41f4b71Sopenharmony_ci
770e41f4b71Sopenharmony_ci**示例:**
771e41f4b71Sopenharmony_ci
772e41f4b71Sopenharmony_ci```ts
773e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
774e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{
775e41f4b71Sopenharmony_ci    console.log("alert listener callback");
776e41f4b71Sopenharmony_ci})
777e41f4b71Sopenharmony_ciworkerInstance.removeAllListener();
778e41f4b71Sopenharmony_ci```
779e41f4b71Sopenharmony_ci
780e41f4b71Sopenharmony_ci## WorkerEventTarget<sup>9+</sup>
781e41f4b71Sopenharmony_ci
782e41f4b71Sopenharmony_ci处理Worker监听事件。
783e41f4b71Sopenharmony_ci
784e41f4b71Sopenharmony_ci### addEventListener<sup>9+</sup>
785e41f4b71Sopenharmony_ci
786e41f4b71Sopenharmony_ciaddEventListener(type: string, listener: WorkerEventListener): void
787e41f4b71Sopenharmony_ci
788e41f4b71Sopenharmony_ci向Worker添加一个事件监听,该接口与[on<sup>9+</sup>](#on9)接口功能一致。
789e41f4b71Sopenharmony_ci
790e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
791e41f4b71Sopenharmony_ci
792e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
793e41f4b71Sopenharmony_ci
794e41f4b71Sopenharmony_ci**参数:**
795e41f4b71Sopenharmony_ci
796e41f4b71Sopenharmony_ci| 参数名   | 类型                                         | 必填 | 说明             |
797e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------- |
798e41f4b71Sopenharmony_ci| type     | string                                       | 是   | 监听的事件类型。 |
799e41f4b71Sopenharmony_ci| listener | [WorkerEventListener](#workereventlistener9) | 是   | 回调的事件。     |
800e41f4b71Sopenharmony_ci
801e41f4b71Sopenharmony_ci**错误码:**
802e41f4b71Sopenharmony_ci
803e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
804e41f4b71Sopenharmony_ci
805e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                   |
806e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- |
807e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
808e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.              |
809e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. |
810e41f4b71Sopenharmony_ci
811e41f4b71Sopenharmony_ci**示例:**
812e41f4b71Sopenharmony_ci
813e41f4b71Sopenharmony_ci```ts
814e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
815e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{
816e41f4b71Sopenharmony_ci    console.log("alert listener callback");
817e41f4b71Sopenharmony_ci})
818e41f4b71Sopenharmony_ci```
819e41f4b71Sopenharmony_ci
820e41f4b71Sopenharmony_ci
821e41f4b71Sopenharmony_ci### removeEventListener<sup>9+</sup>
822e41f4b71Sopenharmony_ci
823e41f4b71Sopenharmony_ciremoveEventListener(type: string, callback?: WorkerEventListener): void
824e41f4b71Sopenharmony_ci
825e41f4b71Sopenharmony_ci删除Worker的事件监听,该接口与[off<sup>9+</sup>](#off9)接口功能一致。
826e41f4b71Sopenharmony_ci
827e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
828e41f4b71Sopenharmony_ci
829e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
830e41f4b71Sopenharmony_ci
831e41f4b71Sopenharmony_ci**参数:**
832e41f4b71Sopenharmony_ci
833e41f4b71Sopenharmony_ci| 参数名   | 类型                                         | 必填 | 说明                         |
834e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- | ---- | ---------------------------- |
835e41f4b71Sopenharmony_ci| type     | string                                       | 是   | 需要删除的监听事件类型。     |
836e41f4b71Sopenharmony_ci| callback | [WorkerEventListener](#workereventlistener9) | 否 | 删除监听事件后所执行的回调事件。 |
837e41f4b71Sopenharmony_ci
838e41f4b71Sopenharmony_ci**错误码:**
839e41f4b71Sopenharmony_ci
840e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
841e41f4b71Sopenharmony_ci
842e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                      |
843e41f4b71Sopenharmony_ci| -------- | ------------------------------- |
844e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
845e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. |
846e41f4b71Sopenharmony_ci
847e41f4b71Sopenharmony_ci**示例:**
848e41f4b71Sopenharmony_ci
849e41f4b71Sopenharmony_ci```ts
850e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
851e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{
852e41f4b71Sopenharmony_ci    console.log("alert listener callback");
853e41f4b71Sopenharmony_ci})
854e41f4b71Sopenharmony_ciworkerInstance.removeEventListener("alert");
855e41f4b71Sopenharmony_ci```
856e41f4b71Sopenharmony_ci
857e41f4b71Sopenharmony_ci
858e41f4b71Sopenharmony_ci### dispatchEvent<sup>9+</sup>
859e41f4b71Sopenharmony_ci
860e41f4b71Sopenharmony_cidispatchEvent(event: Event): boolean
861e41f4b71Sopenharmony_ci
862e41f4b71Sopenharmony_ci分发定义在Worker的事件。
863e41f4b71Sopenharmony_ci
864e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
865e41f4b71Sopenharmony_ci
866e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
867e41f4b71Sopenharmony_ci
868e41f4b71Sopenharmony_ci**参数:**
869e41f4b71Sopenharmony_ci
870e41f4b71Sopenharmony_ci| 参数名 | 类型            | 必填 | 说明             |
871e41f4b71Sopenharmony_ci| ------ | --------------- | ---- | ---------------- |
872e41f4b71Sopenharmony_ci| event  | [Event](#event) | 是   | 需要分发的事件。 |
873e41f4b71Sopenharmony_ci
874e41f4b71Sopenharmony_ci**返回值:**
875e41f4b71Sopenharmony_ci
876e41f4b71Sopenharmony_ci| 类型    | 说明                            |
877e41f4b71Sopenharmony_ci| ------- | ------------------------------- |
878e41f4b71Sopenharmony_ci| boolean | 分发的结果,false表示分发失败。 |
879e41f4b71Sopenharmony_ci
880e41f4b71Sopenharmony_ci**错误码:**
881e41f4b71Sopenharmony_ci
882e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
883e41f4b71Sopenharmony_ci
884e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                      |
885e41f4b71Sopenharmony_ci| -------- | ------------------------------- |
886e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
887e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. |
888e41f4b71Sopenharmony_ci
889e41f4b71Sopenharmony_ci**示例:**
890e41f4b71Sopenharmony_ci
891e41f4b71Sopenharmony_ci```ts
892e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
893e41f4b71Sopenharmony_ci
894e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"eventType", timeStamp:0}); //timeStamp暂未支持。
895e41f4b71Sopenharmony_ci```
896e41f4b71Sopenharmony_ci
897e41f4b71Sopenharmony_ci分发事件(dispatchEvent)可与监听接口(on、once、addEventListener)搭配使用,示例如下:
898e41f4b71Sopenharmony_ci
899e41f4b71Sopenharmony_ci```ts
900e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
901e41f4b71Sopenharmony_ci
902e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
903e41f4b71Sopenharmony_ci
904e41f4b71Sopenharmony_ci//用法一:
905e41f4b71Sopenharmony_ciworkerInstance.on("alert_on", (e)=>{
906e41f4b71Sopenharmony_ci    console.log("alert listener callback");
907e41f4b71Sopenharmony_ci})
908e41f4b71Sopenharmony_ciworkerInstance.once("alert_once", (e)=>{
909e41f4b71Sopenharmony_ci    console.log("alert listener callback");
910e41f4b71Sopenharmony_ci})
911e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert_add", (e)=>{
912e41f4b71Sopenharmony_ci    console.log("alert listener callback");
913e41f4b71Sopenharmony_ci})
914e41f4b71Sopenharmony_ci
915e41f4b71Sopenharmony_ci//once接口创建的事件执行一次便会删除。
916e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_once", timeStamp:0});//timeStamp暂未支持。
917e41f4b71Sopenharmony_ci//on接口创建的事件可以一直被分发,不能主动删除。
918e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_on", timeStamp:0});
919e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_on", timeStamp:0});
920e41f4b71Sopenharmony_ci//addEventListener接口创建的事件可以一直被分发,不能主动删除。
921e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_add", timeStamp:0});
922e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_add", timeStamp:0});
923e41f4b71Sopenharmony_ci
924e41f4b71Sopenharmony_ci//用法二:
925e41f4b71Sopenharmony_ci//event类型的type支持自定义,同时存在"message"/"messageerror"/"error"特殊类型,如下所示
926e41f4b71Sopenharmony_ci//当type = "message",onmessage接口定义的方法同时会执行。
927e41f4b71Sopenharmony_ci//当type = "messageerror",onmessageerror接口定义的方法同时会执行。
928e41f4b71Sopenharmony_ci//当type = "error",onerror接口定义的方法同时会执行。
929e41f4b71Sopenharmony_ci//若调用removeEventListener接口或者off接口取消事件时,能且只能取消使用addEventListener/on/once创建的事件。
930e41f4b71Sopenharmony_ci
931e41f4b71Sopenharmony_ciworkerInstance.addEventListener("message", (e)=>{
932e41f4b71Sopenharmony_ci    console.log("message listener callback");
933e41f4b71Sopenharmony_ci})
934e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => {
935e41f4b71Sopenharmony_ci    console.log("onmessage : message listener callback");
936e41f4b71Sopenharmony_ci}
937e41f4b71Sopenharmony_ci//调用dispatchEvent分发“message”事件,addEventListener和onmessage中定义的方法都会被执行。
938e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"message", timeStamp:0});
939e41f4b71Sopenharmony_ci```
940e41f4b71Sopenharmony_ci
941e41f4b71Sopenharmony_ci
942e41f4b71Sopenharmony_ci### removeAllListener<sup>9+</sup>
943e41f4b71Sopenharmony_ci
944e41f4b71Sopenharmony_ciremoveAllListener(): void
945e41f4b71Sopenharmony_ci
946e41f4b71Sopenharmony_ci删除Worker所有的事件监听。
947e41f4b71Sopenharmony_ci
948e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
949e41f4b71Sopenharmony_ci
950e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
951e41f4b71Sopenharmony_ci
952e41f4b71Sopenharmony_ci**错误码:**
953e41f4b71Sopenharmony_ci
954e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
955e41f4b71Sopenharmony_ci
956e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                      |
957e41f4b71Sopenharmony_ci| -------- | ------------------------------- |
958e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. |
959e41f4b71Sopenharmony_ci
960e41f4b71Sopenharmony_ci**示例:**
961e41f4b71Sopenharmony_ci
962e41f4b71Sopenharmony_ci```ts
963e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
964e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{
965e41f4b71Sopenharmony_ci    console.log("alert listener callback");
966e41f4b71Sopenharmony_ci})
967e41f4b71Sopenharmony_ciworkerInstance.removeAllListener();
968e41f4b71Sopenharmony_ci```
969e41f4b71Sopenharmony_ci
970e41f4b71Sopenharmony_ci
971e41f4b71Sopenharmony_ci## ThreadWorkerGlobalScope<sup>9+</sup>
972e41f4b71Sopenharmony_ci
973e41f4b71Sopenharmony_ciWorker线程用于与宿主线程通信的类,通过postMessage接口发送消息给宿主线程、close接口销毁Worker线程。ThreadWorkerGlobalScope类继承[GlobalScope<sup>9+</sup>](#globalscope9)。
974e41f4b71Sopenharmony_ci
975e41f4b71Sopenharmony_ci### postMessage<sup>9+</sup>
976e41f4b71Sopenharmony_ci
977e41f4b71Sopenharmony_cipostMessage(messageObject: Object, transfer: ArrayBuffer[]): void;
978e41f4b71Sopenharmony_ci
979e41f4b71Sopenharmony_ciWorker线程通过转移对象所有权的方式向宿主线程发送消息。
980e41f4b71Sopenharmony_ci
981e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
982e41f4b71Sopenharmony_ci
983e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
984e41f4b71Sopenharmony_ci
985e41f4b71Sopenharmony_ci**参数:**
986e41f4b71Sopenharmony_ci
987e41f4b71Sopenharmony_ci| 参数名   | 类型          | 必填 | 说明                                                         |
988e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------------------ |
989e41f4b71Sopenharmony_ci| messageObject  | Object        | 是   | 发送至宿主线程的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 |
990e41f4b71Sopenharmony_ci| transfer | ArrayBuffer[] | 是   | 表示可转移的ArrayBuffer实例对象数组,该数组中对象的所有权会被转移到宿主线程,在Worker线程中将会变为不可用,仅在宿主线程中可用,数组不可传入null。 |
991e41f4b71Sopenharmony_ci
992e41f4b71Sopenharmony_ci**错误码:**
993e41f4b71Sopenharmony_ci
994e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
995e41f4b71Sopenharmony_ci
996e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                |
997e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- |
998e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
999e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.           |
1000e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. |
1001e41f4b71Sopenharmony_ci
1002e41f4b71Sopenharmony_ci**示例:**
1003e41f4b71Sopenharmony_ci
1004e41f4b71Sopenharmony_ci```ts
1005e41f4b71Sopenharmony_ci// main thread
1006e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
1007e41f4b71Sopenharmony_ci
1008e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
1009e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world");
1010e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => {
1011e41f4b71Sopenharmony_ci    console.log("receive data from worker.ets");
1012e41f4b71Sopenharmony_ci}
1013e41f4b71Sopenharmony_ci```
1014e41f4b71Sopenharmony_ci
1015e41f4b71Sopenharmony_ci```ts
1016e41f4b71Sopenharmony_ci// worker.ets
1017e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
1018e41f4b71Sopenharmony_ci
1019e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort;
1020e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => {
1021e41f4b71Sopenharmony_ci    let buffer = new ArrayBuffer(8);
1022e41f4b71Sopenharmony_ci    workerPort.postMessage(buffer, [buffer]);
1023e41f4b71Sopenharmony_ci}
1024e41f4b71Sopenharmony_ci```
1025e41f4b71Sopenharmony_ci
1026e41f4b71Sopenharmony_ci### postMessage<sup>9+</sup>
1027e41f4b71Sopenharmony_ci
1028e41f4b71Sopenharmony_cipostMessage(messageObject: Object, options?: PostMessageOptions): void
1029e41f4b71Sopenharmony_ci
1030e41f4b71Sopenharmony_ciWorker线程通过转移对象所有权或者拷贝数据的方式向宿主线程发送消息。
1031e41f4b71Sopenharmony_ci
1032e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
1033e41f4b71Sopenharmony_ci
1034e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1035e41f4b71Sopenharmony_ci
1036e41f4b71Sopenharmony_ci**参数:**
1037e41f4b71Sopenharmony_ci
1038e41f4b71Sopenharmony_ci| 参数名  | 类型                                      | 必填 | 说明                                                         |
1039e41f4b71Sopenharmony_ci| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
1040e41f4b71Sopenharmony_ci| messageObject | Object                                    | 是   | 发送至宿主线程的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 |
1041e41f4b71Sopenharmony_ci| options | [PostMessageOptions](#postmessageoptions) | 否   | 当填入该参数时,与传入ArrayBuffer[]的作用一致,该数组中对象的所有权会被转移到宿主线程,在Worker线程中将会变为不可用,仅在宿主线程中可用。<br/>若不填入该参数,默认设置为 undefined,通过拷贝数据的方式传输信息到宿主线程。 |
1042e41f4b71Sopenharmony_ci
1043e41f4b71Sopenharmony_ci**错误码:**
1044e41f4b71Sopenharmony_ci
1045e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
1046e41f4b71Sopenharmony_ci
1047e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                |
1048e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- |
1049e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
1050e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.           |
1051e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. |
1052e41f4b71Sopenharmony_ci
1053e41f4b71Sopenharmony_ci**示例:**
1054e41f4b71Sopenharmony_ci
1055e41f4b71Sopenharmony_ci```ts
1056e41f4b71Sopenharmony_ci// main thread
1057e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
1058e41f4b71Sopenharmony_ci
1059e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
1060e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world");
1061e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => {
1062e41f4b71Sopenharmony_ci    console.log("receive data from worker.ets");
1063e41f4b71Sopenharmony_ci}
1064e41f4b71Sopenharmony_ci```
1065e41f4b71Sopenharmony_ci
1066e41f4b71Sopenharmony_ci```ts
1067e41f4b71Sopenharmony_ci// worker.ets
1068e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
1069e41f4b71Sopenharmony_ci
1070e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort;
1071e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => {
1072e41f4b71Sopenharmony_ci    workerPort.postMessage("receive data from main thread");
1073e41f4b71Sopenharmony_ci}
1074e41f4b71Sopenharmony_ci```
1075e41f4b71Sopenharmony_ci
1076e41f4b71Sopenharmony_ci
1077e41f4b71Sopenharmony_ci### postMessageWithSharedSendable<sup>12+</sup>
1078e41f4b71Sopenharmony_ci
1079e41f4b71Sopenharmony_cipostMessageWithSharedSendable(message: Object, transfer?: ArrayBuffer[]): void
1080e41f4b71Sopenharmony_ci
1081e41f4b71Sopenharmony_ciWorker线程向宿主线程发送消息,消息中的Sendable对象通过引用传递,消息中的非Sendable对象通过序列化传递。
1082e41f4b71Sopenharmony_ci
1083e41f4b71Sopenharmony_ci**原子化服务API**:从API version 12 开始,该接口支持在原子化服务中使用。
1084e41f4b71Sopenharmony_ci
1085e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1086e41f4b71Sopenharmony_ci
1087e41f4b71Sopenharmony_ci**参数:**
1088e41f4b71Sopenharmony_ci
1089e41f4b71Sopenharmony_ci| 参数名  | 类型                                      | 必填 | 说明                                                         |
1090e41f4b71Sopenharmony_ci| --------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
1091e41f4b71Sopenharmony_ci| message   | Object	     | 是   | 发送至宿主线程的数据,该数据对象必须是可序列化或可共享,序列化支持类型见[序列化类型说明](#序列化支持类型),共享支持类型见[Sendable支持的数据类型](../../arkts-utils/sendable-overview.md#sendable支持的数据类型)。 |
1092e41f4b71Sopenharmony_ci| transfer  | ArrayBuffer[] | 否   | 表示可转移的ArrayBuffer实例对象数组,该数组中对象的所有权会被转移到宿主线程,在Worker线程中将会变为不可用,仅在宿主线程中可用,数组不可传入null。默认值为空数组。 |
1093e41f4b71Sopenharmony_ci
1094e41f4b71Sopenharmony_ci**错误码:**
1095e41f4b71Sopenharmony_ci
1096e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
1097e41f4b71Sopenharmony_ci
1098e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                |
1099e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- |
1100e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
1101e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.           |
1102e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. |
1103e41f4b71Sopenharmony_ci
1104e41f4b71Sopenharmony_ci**示例:**
1105e41f4b71Sopenharmony_ci
1106e41f4b71Sopenharmony_ci<!--code_no_check-->
1107e41f4b71Sopenharmony_ci```ts
1108e41f4b71Sopenharmony_ci// worker文件路径为:entry/src/main/ets/workers/Worker.ets
1109e41f4b71Sopenharmony_ci// Worker.ets
1110e41f4b71Sopenharmony_ci// 新建SendableObject实例并通过worker线程传递至宿主线程
1111e41f4b71Sopenharmony_ci
1112e41f4b71Sopenharmony_ciimport { SendableObject } from '../pages/sendable'
1113e41f4b71Sopenharmony_ciimport { worker, ThreadWorkerGlobalScope, MessageEvents, ErrorEvent } from '@kit.ArkTS';
1114e41f4b71Sopenharmony_ci
1115e41f4b71Sopenharmony_ciconst workerPort: ThreadWorkerGlobalScope = worker.workerPort;
1116e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents) => {
1117e41f4b71Sopenharmony_ci  let object: SendableObject = new SendableObject();
1118e41f4b71Sopenharmony_ci  workerPort.postMessageWithSharedSendable(object);
1119e41f4b71Sopenharmony_ci}
1120e41f4b71Sopenharmony_ci```
1121e41f4b71Sopenharmony_ci
1122e41f4b71Sopenharmony_ci```ts
1123e41f4b71Sopenharmony_ci// sendable.ets
1124e41f4b71Sopenharmony_ci// 定义SendableObject
1125e41f4b71Sopenharmony_ci
1126e41f4b71Sopenharmony_ci@Sendable
1127e41f4b71Sopenharmony_ciexport class SendableObject {
1128e41f4b71Sopenharmony_ci  a:number = 45;
1129e41f4b71Sopenharmony_ci}
1130e41f4b71Sopenharmony_ci```
1131e41f4b71Sopenharmony_ci
1132e41f4b71Sopenharmony_ci<!--code_no_check-->
1133e41f4b71Sopenharmony_ci```ts
1134e41f4b71Sopenharmony_ci// Index.ets
1135e41f4b71Sopenharmony_ci// 接收worker线程传递至宿主线程的数据并访问其属性
1136e41f4b71Sopenharmony_ci
1137e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
1138e41f4b71Sopenharmony_ciimport { SendableObject } from './sendable'
1139e41f4b71Sopenharmony_ci
1140e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/Worker.ets");
1141e41f4b71Sopenharmony_ciworkerInstance.postMessage(1);
1142e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents) => {
1143e41f4b71Sopenharmony_ci  let obj: SendableObject = e.data;
1144e41f4b71Sopenharmony_ci  console.info("sendable index obj is: " + obj.a);
1145e41f4b71Sopenharmony_ci}
1146e41f4b71Sopenharmony_ci```
1147e41f4b71Sopenharmony_ci
1148e41f4b71Sopenharmony_ci
1149e41f4b71Sopenharmony_ci### callGlobalCallObjectMethod<sup>11+</sup>
1150e41f4b71Sopenharmony_ci
1151e41f4b71Sopenharmony_cicallGlobalCallObjectMethod(instanceName: string, methodName: string, timeout: number, ...args: Object[]): Object
1152e41f4b71Sopenharmony_ci
1153e41f4b71Sopenharmony_ciWorker线程调用注册在宿主线程上某个对象的指定方法,调用对于Worker线程是同步的,对于宿主线程是异步的,返回值通过序列化传递。
1154e41f4b71Sopenharmony_ci
1155e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1156e41f4b71Sopenharmony_ci
1157e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1158e41f4b71Sopenharmony_ci
1159e41f4b71Sopenharmony_ci**参数:**
1160e41f4b71Sopenharmony_ci
1161e41f4b71Sopenharmony_ci| 参数名  | 类型                                      | 必填 | 说明                                                         |
1162e41f4b71Sopenharmony_ci| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
1163e41f4b71Sopenharmony_ci| instanceName | string                                    | 是   | 注册对象时使用的键,用于在宿主线程查找对象。 |
1164e41f4b71Sopenharmony_ci| methodName | string | 是 | 在已注册对象上调用的方法名,注意该方法不能为使用async或generator修饰的方法,或底层使用了异步机制等异步返回结果的方法,否则会抛出异常。 |
1165e41f4b71Sopenharmony_ci| timeout | number | 是 | 本次同步调用的等待时间单位为ms,取整数,取值范围为[1-5000]ms。也可取特殊值0,此时表示本次调用等待时间为5000ms。 |
1166e41f4b71Sopenharmony_ci| args | Object[] | 否 | 注册对象上所调用方法的参数数组。 |
1167e41f4b71Sopenharmony_ci
1168e41f4b71Sopenharmony_ci**返回值:**
1169e41f4b71Sopenharmony_ci
1170e41f4b71Sopenharmony_ci| 类型                                  | 说明                            |
1171e41f4b71Sopenharmony_ci| ------------------------------------- | ------------------------------- |
1172e41f4b71Sopenharmony_ci| Object | 返回值为调用方法在宿主线程的返回值,该返回值必须是可序列化的,具体可见序列化支持类型。|
1173e41f4b71Sopenharmony_ci
1174e41f4b71Sopenharmony_ci**错误码:**
1175e41f4b71Sopenharmony_ci
1176e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
1177e41f4b71Sopenharmony_ci
1178e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                |
1179e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- |
1180e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
1181e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running.           |
1182e41f4b71Sopenharmony_ci| 10200006 | An exception occurred during serialization. |
1183e41f4b71Sopenharmony_ci| 10200019 | The globalCallObject is not registered. |
1184e41f4b71Sopenharmony_ci| 10200020 | The method to be called is not callable or is an async method or a generator. |
1185e41f4b71Sopenharmony_ci| 10200021 | The global call exceeds the timeout. |
1186e41f4b71Sopenharmony_ci
1187e41f4b71Sopenharmony_ci**示例:**
1188e41f4b71Sopenharmony_ci```ts
1189e41f4b71Sopenharmony_ci// worker.ets
1190e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
1191e41f4b71Sopenharmony_ci
1192e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort;
1193e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => {
1194e41f4b71Sopenharmony_ci  try {
1195e41f4b71Sopenharmony_ci    // 调用方法无入参
1196e41f4b71Sopenharmony_ci    let res : string = workerPort.callGlobalCallObjectMethod("myObj", "getMessage", 0) as string;
1197e41f4b71Sopenharmony_ci    console.info("worker:", res) // worker: this is a message from TestObj
1198e41f4b71Sopenharmony_ci  } catch (error) {
1199e41f4b71Sopenharmony_ci    // 异常处理
1200e41f4b71Sopenharmony_ci    console.error("worker: error code is " + error.code + " error message is " + error.message);
1201e41f4b71Sopenharmony_ci  }
1202e41f4b71Sopenharmony_ci  try {
1203e41f4b71Sopenharmony_ci    // 调用方法有入参
1204e41f4b71Sopenharmony_ci    let res : string = workerPort.callGlobalCallObjectMethod("myObj", "getMessageWithInput", 0, "hello there!") as string;
1205e41f4b71Sopenharmony_ci    console.info("worker:", res) //worker: this is a message from TestObj with input: hello there!
1206e41f4b71Sopenharmony_ci  } catch (error) {
1207e41f4b71Sopenharmony_ci    // 异常处理
1208e41f4b71Sopenharmony_ci    console.error("worker: error code is " + error.code + " error message is " + error.message);
1209e41f4b71Sopenharmony_ci  }
1210e41f4b71Sopenharmony_ci}
1211e41f4b71Sopenharmony_ci```
1212e41f4b71Sopenharmony_ci
1213e41f4b71Sopenharmony_ci### close<sup>9+</sup>
1214e41f4b71Sopenharmony_ci
1215e41f4b71Sopenharmony_ciclose(): void
1216e41f4b71Sopenharmony_ci
1217e41f4b71Sopenharmony_ci销毁Worker线程,终止Worker接收消息。
1218e41f4b71Sopenharmony_ci
1219e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
1220e41f4b71Sopenharmony_ci
1221e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1222e41f4b71Sopenharmony_ci
1223e41f4b71Sopenharmony_ci**错误码:**
1224e41f4b71Sopenharmony_ci
1225e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。
1226e41f4b71Sopenharmony_ci
1227e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                      |
1228e41f4b71Sopenharmony_ci| -------- | ------------------------------- |
1229e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running. |
1230e41f4b71Sopenharmony_ci
1231e41f4b71Sopenharmony_ci**示例:**
1232e41f4b71Sopenharmony_ci
1233e41f4b71Sopenharmony_ci```ts
1234e41f4b71Sopenharmony_ci// main thread
1235e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
1236e41f4b71Sopenharmony_ci
1237e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
1238e41f4b71Sopenharmony_ci```
1239e41f4b71Sopenharmony_ci
1240e41f4b71Sopenharmony_ci```ts
1241e41f4b71Sopenharmony_ci// worker.ets
1242e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
1243e41f4b71Sopenharmony_ci
1244e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort;
1245e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => {
1246e41f4b71Sopenharmony_ci    workerPort.close()
1247e41f4b71Sopenharmony_ci}
1248e41f4b71Sopenharmony_ci```
1249e41f4b71Sopenharmony_ci
1250e41f4b71Sopenharmony_ci
1251e41f4b71Sopenharmony_ci### onmessage<sup>9+</sup>
1252e41f4b71Sopenharmony_ci
1253e41f4b71Sopenharmony_cionmessage?: (this: ThreadWorkerGlobalScope, ev: MessageEvents) =&gt; void
1254e41f4b71Sopenharmony_ci
1255e41f4b71Sopenharmony_ci回调函数。ThreadWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿主线程通过postMessage接口发送的消息时被调用的事件处理程序,处理程序在Worker线程中执行。其中this指调用者对象本身[ThreadWorkerGlobalScope](#threadworkerglobalscope9),ev类型为[MessageEvents](#messageevents9),表示收到的Worker消息数据。
1256e41f4b71Sopenharmony_ci
1257e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
1258e41f4b71Sopenharmony_ci
1259e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1260e41f4b71Sopenharmony_ci
1261e41f4b71Sopenharmony_ci**错误码:**
1262e41f4b71Sopenharmony_ci
1263e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
1264e41f4b71Sopenharmony_ci
1265e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                   |
1266e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- |
1267e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. |
1268e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.              |
1269e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. |
1270e41f4b71Sopenharmony_ci
1271e41f4b71Sopenharmony_ci**示例:**
1272e41f4b71Sopenharmony_ci
1273e41f4b71Sopenharmony_ci```ts
1274e41f4b71Sopenharmony_ci// main thread
1275e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
1276e41f4b71Sopenharmony_ci
1277e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
1278e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world");
1279e41f4b71Sopenharmony_ci```
1280e41f4b71Sopenharmony_ci
1281e41f4b71Sopenharmony_ci```ts
1282e41f4b71Sopenharmony_ci// worker.ets
1283e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
1284e41f4b71Sopenharmony_ci
1285e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort;
1286e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => {
1287e41f4b71Sopenharmony_ci    console.log("receive main thread message");
1288e41f4b71Sopenharmony_ci}
1289e41f4b71Sopenharmony_ci```
1290e41f4b71Sopenharmony_ci
1291e41f4b71Sopenharmony_ci
1292e41f4b71Sopenharmony_ci### onmessageerror<sup>9+</sup>
1293e41f4b71Sopenharmony_ci
1294e41f4b71Sopenharmony_cionmessageerror?: (this: ThreadWorkerGlobalScope, ev: MessageEvents) =&gt; void
1295e41f4b71Sopenharmony_ci
1296e41f4b71Sopenharmony_ci回调函数。ThreadWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到一条无法被反序列化的消息时被调用的事件处理程序,处理程序在Worker线程中执行。其中this指调用者对象本身[ThreadWorkerGlobalScope](#threadworkerglobalscope9),ev类型为[MessageEvents](#messageevents9),表示收到的Worker消息数据。
1297e41f4b71Sopenharmony_ci
1298e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
1299e41f4b71Sopenharmony_ci
1300e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1301e41f4b71Sopenharmony_ci
1302e41f4b71Sopenharmony_ci**错误码:**
1303e41f4b71Sopenharmony_ci
1304e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
1305e41f4b71Sopenharmony_ci
1306e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                   |
1307e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- |
1308e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Incorrect parameter types. |
1309e41f4b71Sopenharmony_ci| 10200004 | The Worker instance is not running.              |
1310e41f4b71Sopenharmony_ci| 10200005 | The called API is not supported in the worker thread. |
1311e41f4b71Sopenharmony_ci
1312e41f4b71Sopenharmony_ci**示例:**
1313e41f4b71Sopenharmony_ci
1314e41f4b71Sopenharmony_ci```ts
1315e41f4b71Sopenharmony_ci// main thread
1316e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
1317e41f4b71Sopenharmony_ci
1318e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
1319e41f4b71Sopenharmony_ci```
1320e41f4b71Sopenharmony_ci
1321e41f4b71Sopenharmony_ci```ts
1322e41f4b71Sopenharmony_ci// worker.ets
1323e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
1324e41f4b71Sopenharmony_ci
1325e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort;
1326e41f4b71Sopenharmony_ciworkerPort.onmessageerror = (err: MessageEvents) => {
1327e41f4b71Sopenharmony_ci    console.log("worker.ets onmessageerror");
1328e41f4b71Sopenharmony_ci}
1329e41f4b71Sopenharmony_ci```
1330e41f4b71Sopenharmony_ci
1331e41f4b71Sopenharmony_ci
1332e41f4b71Sopenharmony_ci## WorkerEventListener<sup>9+</sup>
1333e41f4b71Sopenharmony_ci
1334e41f4b71Sopenharmony_ci事件监听类。
1335e41f4b71Sopenharmony_ci
1336e41f4b71Sopenharmony_ci### (event: Event)<sup>9+</sup>
1337e41f4b71Sopenharmony_ci
1338e41f4b71Sopenharmony_ci(event: Event): void | Promise&lt;void&gt;
1339e41f4b71Sopenharmony_ci
1340e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1341e41f4b71Sopenharmony_ci
1342e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1343e41f4b71Sopenharmony_ci
1344e41f4b71Sopenharmony_ci**参数:**
1345e41f4b71Sopenharmony_ci
1346e41f4b71Sopenharmony_ci| 参数名 | 类型            | 必填 | 说明           |
1347e41f4b71Sopenharmony_ci| ------ | --------------- | ---- | -------------- |
1348e41f4b71Sopenharmony_ci| event  | [Event](#event) | 是   | 回调的事件类。 |
1349e41f4b71Sopenharmony_ci
1350e41f4b71Sopenharmony_ci**返回值:**
1351e41f4b71Sopenharmony_ci
1352e41f4b71Sopenharmony_ci| 类型                                  | 说明                            |
1353e41f4b71Sopenharmony_ci| ------------------------------------- | ------------------------------- |
1354e41f4b71Sopenharmony_ci| void&nbsp;\|&nbsp;Promise&lt;void&gt; | 无返回值或者以Promise形式返回。 |
1355e41f4b71Sopenharmony_ci
1356e41f4b71Sopenharmony_ci**错误码:**
1357e41f4b71Sopenharmony_ci
1358e41f4b71Sopenharmony_ci以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。
1359e41f4b71Sopenharmony_ci
1360e41f4b71Sopenharmony_ci| 错误码ID | 错误信息                                   |
1361e41f4b71Sopenharmony_ci| -------- | -------------------------------------------- |
1362e41f4b71Sopenharmony_ci| 401      | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types; 3. Parameter verification failed. |
1363e41f4b71Sopenharmony_ci| 10200004 | Worker instance is not running.          |
1364e41f4b71Sopenharmony_ci| 10200005 | The invoked API is not supported in workers. |
1365e41f4b71Sopenharmony_ci
1366e41f4b71Sopenharmony_ci**示例:**
1367e41f4b71Sopenharmony_ci
1368e41f4b71Sopenharmony_ci```ts
1369e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets");
1370e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{
1371e41f4b71Sopenharmony_ci    console.log("alert listener callback");
1372e41f4b71Sopenharmony_ci})
1373e41f4b71Sopenharmony_ci```
1374e41f4b71Sopenharmony_ci
1375e41f4b71Sopenharmony_ci
1376e41f4b71Sopenharmony_ci## GlobalScope<sup>9+</sup>
1377e41f4b71Sopenharmony_ci
1378e41f4b71Sopenharmony_ciWorker线程自身的运行环境,GlobalScope类继承[WorkerEventTarget](#workereventtarget9)。
1379e41f4b71Sopenharmony_ci
1380e41f4b71Sopenharmony_ci### 属性
1381e41f4b71Sopenharmony_ci
1382e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。
1383e41f4b71Sopenharmony_ci
1384e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1385e41f4b71Sopenharmony_ci
1386e41f4b71Sopenharmony_ci| 名称 | 类型                                                         | 可读 | 可写 | 说明                                  |
1387e41f4b71Sopenharmony_ci| ---- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------- |
1388e41f4b71Sopenharmony_ci| name | string                                                       | 是   | 否   | Worker的名字,new&nbsp;Worker时指定。 |
1389e41f4b71Sopenharmony_ci| self | [GlobalScope](#globalscope9)&nbsp;&amp;&nbsp;typeof&nbsp;globalThis | 是   | 否   | GlobalScope本身。                     |
1390e41f4b71Sopenharmony_ci
1391e41f4b71Sopenharmony_ci
1392e41f4b71Sopenharmony_ci### onerror<sup>9+</sup>
1393e41f4b71Sopenharmony_ci
1394e41f4b71Sopenharmony_cionerror?: (ev: ErrorEvent) =&gt; void
1395e41f4b71Sopenharmony_ci
1396e41f4b71Sopenharmony_ci回调函数。GlobalScope的onerror属性表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在Worker线程中执行。其中回调函数中ev类型为[ErrorEvent](#errorevent),表示收到的异常数据。
1397e41f4b71Sopenharmony_ci
1398e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11 开始,该接口支持在原子化服务中使用。
1399e41f4b71Sopenharmony_ci
1400e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1401e41f4b71Sopenharmony_ci
1402e41f4b71Sopenharmony_ci**示例:**
1403e41f4b71Sopenharmony_ci
1404e41f4b71Sopenharmony_ci```ts
1405e41f4b71Sopenharmony_ci// main thread
1406e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
1407e41f4b71Sopenharmony_ci
1408e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/workers/worker.ets")
1409e41f4b71Sopenharmony_ci```
1410e41f4b71Sopenharmony_ci
1411e41f4b71Sopenharmony_ci```ts
1412e41f4b71Sopenharmony_ci// worker.ets
1413e41f4b71Sopenharmony_ciimport { worker, ErrorEvent } from '@kit.ArkTS';
1414e41f4b71Sopenharmony_ci
1415e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort
1416e41f4b71Sopenharmony_ciworkerPort.onerror = (err: ErrorEvent) => {
1417e41f4b71Sopenharmony_ci    console.log("worker.ets onerror" + err.message)
1418e41f4b71Sopenharmony_ci}
1419e41f4b71Sopenharmony_ci```
1420e41f4b71Sopenharmony_ci
1421e41f4b71Sopenharmony_ci## MessageEvents<sup>9+</sup>
1422e41f4b71Sopenharmony_ci
1423e41f4b71Sopenharmony_ci消息类,持有Worker线程间传递的数据。
1424e41f4b71Sopenharmony_ci
1425e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
1426e41f4b71Sopenharmony_ci
1427e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1428e41f4b71Sopenharmony_ci
1429e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明               |
1430e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | ------------------ |
1431e41f4b71Sopenharmony_ci| data | any  | 是   | 否   | 线程间传递的数据。 |
1432e41f4b71Sopenharmony_ci
1433e41f4b71Sopenharmony_ci## Worker<sup>(deprecated)</sup>
1434e41f4b71Sopenharmony_ci
1435e41f4b71Sopenharmony_ci使用以下方法前,均需先构造Worker实例,Worker类继承[EventTarget](#eventtargetdeprecated)。
1436e41f4b71Sopenharmony_ci
1437e41f4b71Sopenharmony_ci> **说明:**<br/>
1438e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker<sup>9+</sup>](#threadworker9)替代。
1439e41f4b71Sopenharmony_ci
1440e41f4b71Sopenharmony_ci### constructor<sup>(deprecated)</sup>
1441e41f4b71Sopenharmony_ci
1442e41f4b71Sopenharmony_ciconstructor(scriptURL: string, options?: WorkerOptions)
1443e41f4b71Sopenharmony_ci
1444e41f4b71Sopenharmony_ciWorker构造函数。
1445e41f4b71Sopenharmony_ci
1446e41f4b71Sopenharmony_ci> **说明:**<br/>
1447e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.constructor<sup>9+</sup>](#constructor9)替代。
1448e41f4b71Sopenharmony_ci
1449e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1450e41f4b71Sopenharmony_ci
1451e41f4b71Sopenharmony_ci**参数:**
1452e41f4b71Sopenharmony_ci
1453e41f4b71Sopenharmony_ci| 参数名    | 类型                            | 必填 | 说明                                                         |
1454e41f4b71Sopenharmony_ci| --------- | ------------------------------- | ---- | ------------------------------------------------------------ |
1455e41f4b71Sopenharmony_ci| scriptURL | string                          | 是   | Worker线程文件的路径,路径规则详细参考[文件路径注意事项](../../arkts-utils/worker-introduction.md#文件路径注意事项)。 |
1456e41f4b71Sopenharmony_ci| options   | [WorkerOptions](#workeroptions) | 否   | Worker构造的选项。                                           |
1457e41f4b71Sopenharmony_ci
1458e41f4b71Sopenharmony_ci**示例:**
1459e41f4b71Sopenharmony_ci
1460e41f4b71Sopenharmony_ci此处以在Stage模型中Ability加载Worker文件为例,使用Library加载Worker线程文件的场景参考[文件路径注意事项](../../arkts-utils/worker-introduction.md#文件路径注意事项)。
1461e41f4b71Sopenharmony_ci
1462e41f4b71Sopenharmony_ci
1463e41f4b71Sopenharmony_ci```ts
1464e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
1465e41f4b71Sopenharmony_ci
1466e41f4b71Sopenharmony_ci// 主要说明以下两种场景:
1467e41f4b71Sopenharmony_ci
1468e41f4b71Sopenharmony_ci// 场景1: worker文件所在路径:"entry/src/main/ets/workers/worker.ets"
1469e41f4b71Sopenharmony_ciconst workerStageModel01 = new worker.ThreadWorker('entry/ets/workers/worker.ets', {name:"first worker in Stage model"});
1470e41f4b71Sopenharmony_ci
1471e41f4b71Sopenharmony_ci// 场景2: worker文件所在路径:"phone/src/main/ets/ThreadFile/workers/worker.ets"
1472e41f4b71Sopenharmony_ciconst workerStageModel02 = new worker.ThreadWorker('phone/ets/ThreadFile/workers/worker.ets');
1473e41f4b71Sopenharmony_ci```
1474e41f4b71Sopenharmony_ci
1475e41f4b71Sopenharmony_ci### postMessage<sup>(deprecated)</sup>
1476e41f4b71Sopenharmony_ci
1477e41f4b71Sopenharmony_cipostMessage(message: Object, transfer: ArrayBuffer[]): void
1478e41f4b71Sopenharmony_ci
1479e41f4b71Sopenharmony_ci宿主线程通过转移对象所有权的方式向Worker线程发送消息。
1480e41f4b71Sopenharmony_ci
1481e41f4b71Sopenharmony_ci> **说明:**<br/>
1482e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.postMessage<sup>9+</sup>](#postmessage9)替代。
1483e41f4b71Sopenharmony_ci
1484e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1485e41f4b71Sopenharmony_ci
1486e41f4b71Sopenharmony_ci**参数:**
1487e41f4b71Sopenharmony_ci
1488e41f4b71Sopenharmony_ci| 参数名   | 类型          | 必填 | 说明                                                         |
1489e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------------------ |
1490e41f4b71Sopenharmony_ci| message  | Object        | 是   | 发送至Worker的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 |
1491e41f4b71Sopenharmony_ci| transfer | ArrayBuffer[] | 是   | 表示可转移的ArrayBuffer实例对象数组,该数组中对象的所有权会被转移到Worker线程,在宿主线程中将会变为不可用,仅在Worker线程中可用,数组不可传入null。 |
1492e41f4b71Sopenharmony_ci
1493e41f4b71Sopenharmony_ci**示例:**
1494e41f4b71Sopenharmony_ci
1495e41f4b71Sopenharmony_ci```ts
1496e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1497e41f4b71Sopenharmony_ci
1498e41f4b71Sopenharmony_cilet buffer = new ArrayBuffer(8);
1499e41f4b71Sopenharmony_ciworkerInstance.postMessage(buffer, [buffer]);
1500e41f4b71Sopenharmony_ci```
1501e41f4b71Sopenharmony_ci
1502e41f4b71Sopenharmony_ci### postMessage<sup>(deprecated)</sup>
1503e41f4b71Sopenharmony_ci
1504e41f4b71Sopenharmony_cipostMessage(message: Object, options?: PostMessageOptions): void
1505e41f4b71Sopenharmony_ci
1506e41f4b71Sopenharmony_ci宿主线程通过转移对象所有权或者拷贝数据的方式向Worker线程发送消息。
1507e41f4b71Sopenharmony_ci
1508e41f4b71Sopenharmony_ci> **说明:**<br/>
1509e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.postMessage<sup>9+</sup>](#postmessage9-1)替代。
1510e41f4b71Sopenharmony_ci
1511e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1512e41f4b71Sopenharmony_ci
1513e41f4b71Sopenharmony_ci**参数:**
1514e41f4b71Sopenharmony_ci
1515e41f4b71Sopenharmony_ci| 参数名  | 类型                                      | 必填 | 说明                                                         |
1516e41f4b71Sopenharmony_ci| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
1517e41f4b71Sopenharmony_ci| message | Object                                    | 是   | 发送至Worker的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 |
1518e41f4b71Sopenharmony_ci| options | [PostMessageOptions](#postmessageoptions) | 否   | 当填入该参数时,与传入ArrayBuffer[]的作用一致,该数组中对象的所有权会被转移到Worker线程,在宿主线程中将会变为不可用,仅在Worker线程中可用。<br/>若不填入该参数,默认设置为 undefined,通过拷贝数据的方式传输信息到Worker线程。 |
1519e41f4b71Sopenharmony_ci
1520e41f4b71Sopenharmony_ci**示例:**
1521e41f4b71Sopenharmony_ci
1522e41f4b71Sopenharmony_ci```ts
1523e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1524e41f4b71Sopenharmony_ci
1525e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world");
1526e41f4b71Sopenharmony_ci
1527e41f4b71Sopenharmony_cilet buffer = new ArrayBuffer(8);
1528e41f4b71Sopenharmony_ciworkerInstance.postMessage(buffer, [buffer]);
1529e41f4b71Sopenharmony_ci```
1530e41f4b71Sopenharmony_ci
1531e41f4b71Sopenharmony_ci
1532e41f4b71Sopenharmony_ci### on<sup>(deprecated)</sup>
1533e41f4b71Sopenharmony_ci
1534e41f4b71Sopenharmony_cion(type: string, listener: EventListener): void
1535e41f4b71Sopenharmony_ci
1536e41f4b71Sopenharmony_ci向Worker添加一个事件监听,该接口与[addEventListener<sup>(deprecated)</sup>](#addeventlistenerdeprecated)接口功能一致。
1537e41f4b71Sopenharmony_ci
1538e41f4b71Sopenharmony_ci> **说明:**<br/>
1539e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.on<sup>9+</sup>](#on9)替代。
1540e41f4b71Sopenharmony_ci
1541e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1542e41f4b71Sopenharmony_ci
1543e41f4b71Sopenharmony_ci**参数:**
1544e41f4b71Sopenharmony_ci
1545e41f4b71Sopenharmony_ci| 参数名   | 类型                                      | 必填 | 说明             |
1546e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | ---- | ---------------- |
1547e41f4b71Sopenharmony_ci| type     | string                                    | 是   | 监听的事件类型。 |
1548e41f4b71Sopenharmony_ci| listener | [EventListener](#eventlistenerdeprecated) | 是   | 回调事件。       |
1549e41f4b71Sopenharmony_ci
1550e41f4b71Sopenharmony_ci**示例:**
1551e41f4b71Sopenharmony_ci
1552e41f4b71Sopenharmony_ci```ts
1553e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1554e41f4b71Sopenharmony_ciworkerInstance.on("alert", (e)=>{
1555e41f4b71Sopenharmony_ci    console.log("alert listener callback");
1556e41f4b71Sopenharmony_ci})
1557e41f4b71Sopenharmony_ci```
1558e41f4b71Sopenharmony_ci
1559e41f4b71Sopenharmony_ci
1560e41f4b71Sopenharmony_ci### once<sup>(deprecated)</sup>
1561e41f4b71Sopenharmony_ci
1562e41f4b71Sopenharmony_cionce(type: string, listener: EventListener): void
1563e41f4b71Sopenharmony_ci
1564e41f4b71Sopenharmony_ci向Worker添加一个事件监听,事件监听只执行一次便自动删除。
1565e41f4b71Sopenharmony_ci
1566e41f4b71Sopenharmony_ci> **说明:**<br/>
1567e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.once<sup>9+</sup>](#once9)替代。
1568e41f4b71Sopenharmony_ci
1569e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1570e41f4b71Sopenharmony_ci
1571e41f4b71Sopenharmony_ci**参数:**
1572e41f4b71Sopenharmony_ci
1573e41f4b71Sopenharmony_ci| 参数名   | 类型                                      | 必填 | 说明             |
1574e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | ---- | ---------------- |
1575e41f4b71Sopenharmony_ci| type     | string                                    | 是   | 监听的事件类型。 |
1576e41f4b71Sopenharmony_ci| listener | [EventListener](#eventlistenerdeprecated) | 是   | 回调事件。       |
1577e41f4b71Sopenharmony_ci
1578e41f4b71Sopenharmony_ci**示例:**
1579e41f4b71Sopenharmony_ci
1580e41f4b71Sopenharmony_ci```ts
1581e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1582e41f4b71Sopenharmony_ciworkerInstance.once("alert", (e)=>{
1583e41f4b71Sopenharmony_ci    console.log("alert listener callback");
1584e41f4b71Sopenharmony_ci})
1585e41f4b71Sopenharmony_ci```
1586e41f4b71Sopenharmony_ci
1587e41f4b71Sopenharmony_ci
1588e41f4b71Sopenharmony_ci### off<sup>(deprecated)</sup>
1589e41f4b71Sopenharmony_ci
1590e41f4b71Sopenharmony_cioff(type: string, listener?: EventListener): void
1591e41f4b71Sopenharmony_ci
1592e41f4b71Sopenharmony_ci删除类型为type的事件监听,该接口与[removeEventListener<sup>(deprecated)</sup>](#removeeventlistenerdeprecated)接口功能一致。
1593e41f4b71Sopenharmony_ci
1594e41f4b71Sopenharmony_ci> **说明:**<br/>
1595e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.off<sup>9+</sup>](#off9)替代。
1596e41f4b71Sopenharmony_ci
1597e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1598e41f4b71Sopenharmony_ci
1599e41f4b71Sopenharmony_ci**参数:**
1600e41f4b71Sopenharmony_ci
1601e41f4b71Sopenharmony_ci| 参数名   | 类型                                      | 必填 | 说明                 |
1602e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | ---- | -------------------- |
1603e41f4b71Sopenharmony_ci| type     | string                                    | 是   | 需要删除的事件类型。 |
1604e41f4b71Sopenharmony_ci| listener | [EventListener](#eventlistenerdeprecated) | 否   | 删除监听事件后所执行的回调事件。 |
1605e41f4b71Sopenharmony_ci
1606e41f4b71Sopenharmony_ci**示例:**
1607e41f4b71Sopenharmony_ci
1608e41f4b71Sopenharmony_ci```ts
1609e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1610e41f4b71Sopenharmony_ci//使用on接口、once接口或addEventListener接口创建“alert”事件,使用off接口删除事件。
1611e41f4b71Sopenharmony_ciworkerInstance.off("alert");
1612e41f4b71Sopenharmony_ci```
1613e41f4b71Sopenharmony_ci
1614e41f4b71Sopenharmony_ci
1615e41f4b71Sopenharmony_ci### terminate<sup>(deprecated)</sup>
1616e41f4b71Sopenharmony_ci
1617e41f4b71Sopenharmony_citerminate(): void
1618e41f4b71Sopenharmony_ci
1619e41f4b71Sopenharmony_ci销毁Worker线程,终止Worker接收消息。
1620e41f4b71Sopenharmony_ci
1621e41f4b71Sopenharmony_ci> **说明:**<br/>
1622e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.terminate<sup>9+</sup>](#terminate9)替代。
1623e41f4b71Sopenharmony_ci
1624e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1625e41f4b71Sopenharmony_ci
1626e41f4b71Sopenharmony_ci**示例:**
1627e41f4b71Sopenharmony_ci
1628e41f4b71Sopenharmony_ci```ts
1629e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1630e41f4b71Sopenharmony_ciworkerInstance.terminate();
1631e41f4b71Sopenharmony_ci```
1632e41f4b71Sopenharmony_ci
1633e41f4b71Sopenharmony_ci
1634e41f4b71Sopenharmony_ci### onexit<sup>(deprecated)</sup>
1635e41f4b71Sopenharmony_ci
1636e41f4b71Sopenharmony_cionexit?: (code: number) =&gt; void
1637e41f4b71Sopenharmony_ci
1638e41f4b71Sopenharmony_ci回调函数。表示Worker销毁时被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中code类型为number,异常退出为1,正常退出为0。
1639e41f4b71Sopenharmony_ci
1640e41f4b71Sopenharmony_ci> **说明:**<br/>
1641e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.onexit<sup>9+</sup>](#onexit9)替代。
1642e41f4b71Sopenharmony_ci
1643e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1644e41f4b71Sopenharmony_ci
1645e41f4b71Sopenharmony_ci**示例:**
1646e41f4b71Sopenharmony_ci
1647e41f4b71Sopenharmony_ci```ts
1648e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1649e41f4b71Sopenharmony_ciworkerInstance.onexit = (code) => {
1650e41f4b71Sopenharmony_ci    console.log("onexit");
1651e41f4b71Sopenharmony_ci}
1652e41f4b71Sopenharmony_ci
1653e41f4b71Sopenharmony_ci//onexit被执行两种方式:
1654e41f4b71Sopenharmony_ci//main thread:
1655e41f4b71Sopenharmony_ciworkerInstance.terminate();
1656e41f4b71Sopenharmony_ci
1657e41f4b71Sopenharmony_ci//worker线程:
1658e41f4b71Sopenharmony_ci//parentPort.close()
1659e41f4b71Sopenharmony_ci```
1660e41f4b71Sopenharmony_ci
1661e41f4b71Sopenharmony_ci
1662e41f4b71Sopenharmony_ci### onerror<sup>(deprecated)</sup>
1663e41f4b71Sopenharmony_ci
1664e41f4b71Sopenharmony_cionerror?: (err: ErrorEvent) =&gt; void
1665e41f4b71Sopenharmony_ci
1666e41f4b71Sopenharmony_ci回调函数。表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中err类型为[ErrorEvent](#errorevent),表示收到的异常数据。
1667e41f4b71Sopenharmony_ci
1668e41f4b71Sopenharmony_ci> **说明:**<br/>
1669e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.onerror<sup>9+</sup>](#onerror9)替代。
1670e41f4b71Sopenharmony_ci
1671e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1672e41f4b71Sopenharmony_ci
1673e41f4b71Sopenharmony_ci**示例:**
1674e41f4b71Sopenharmony_ci
1675e41f4b71Sopenharmony_ci```ts
1676e41f4b71Sopenharmony_ciimport { worker, ErrorEvent } from '@kit.ArkTS';
1677e41f4b71Sopenharmony_ci
1678e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1679e41f4b71Sopenharmony_ciworkerInstance.onerror = (err: ErrorEvent) => {
1680e41f4b71Sopenharmony_ci  console.log("onerror" + err.message);
1681e41f4b71Sopenharmony_ci}
1682e41f4b71Sopenharmony_ci```
1683e41f4b71Sopenharmony_ci
1684e41f4b71Sopenharmony_ci
1685e41f4b71Sopenharmony_ci### onmessage<sup>(deprecated)</sup>
1686e41f4b71Sopenharmony_ci
1687e41f4b71Sopenharmony_cionmessage?: (event: MessageEvent) =&gt; void
1688e41f4b71Sopenharmony_ci
1689e41f4b71Sopenharmony_ci回调函数。表示宿主线程接收到来自其创建的Worker通过workerPort.postMessage接口发送的消息时被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中event类型为[MessageEvent](#messageeventt),表示收到的Worker消息数据。
1690e41f4b71Sopenharmony_ci
1691e41f4b71Sopenharmony_ci> **说明:**<br/>
1692e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.onmessage<sup>9+</sup>](#onmessage9)替代。
1693e41f4b71Sopenharmony_ci
1694e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1695e41f4b71Sopenharmony_ci
1696e41f4b71Sopenharmony_ci**示例:**
1697e41f4b71Sopenharmony_ci
1698e41f4b71Sopenharmony_ci```ts
1699e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
1700e41f4b71Sopenharmony_ci
1701e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1702e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e): void => {
1703e41f4b71Sopenharmony_ci    console.log("onmessage");
1704e41f4b71Sopenharmony_ci}
1705e41f4b71Sopenharmony_ci```
1706e41f4b71Sopenharmony_ci
1707e41f4b71Sopenharmony_ci
1708e41f4b71Sopenharmony_ci### onmessageerror<sup>(deprecated)</sup>
1709e41f4b71Sopenharmony_ci
1710e41f4b71Sopenharmony_cionmessageerror?: (event: MessageEvent) =&gt; void
1711e41f4b71Sopenharmony_ci
1712e41f4b71Sopenharmony_ci回调函数。表示当Worker对象接收到一条无法被序列化的消息时被调用的事件处理程序,处理程序在宿主线程中执行。其中回调函数中event类型为[MessageEvent](#messageeventt),表示收到的Worker消息数据。
1713e41f4b71Sopenharmony_ci
1714e41f4b71Sopenharmony_ci> **说明:**<br/>
1715e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorker.onmessageerror<sup>9+</sup>](#onmessageerror9)替代。
1716e41f4b71Sopenharmony_ci
1717e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1718e41f4b71Sopenharmony_ci
1719e41f4b71Sopenharmony_ci**示例:**
1720e41f4b71Sopenharmony_ci
1721e41f4b71Sopenharmony_ci```ts
1722e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
1723e41f4b71Sopenharmony_ci
1724e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1725e41f4b71Sopenharmony_ciworkerInstance.onmessageerror = (err) => {
1726e41f4b71Sopenharmony_ci    console.log("onmessageerror");
1727e41f4b71Sopenharmony_ci}
1728e41f4b71Sopenharmony_ci```
1729e41f4b71Sopenharmony_ci
1730e41f4b71Sopenharmony_ci
1731e41f4b71Sopenharmony_ci## EventTarget<sup>(deprecated)</sup>
1732e41f4b71Sopenharmony_ci> **说明:**<br/>
1733e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[WorkerEventTarget<sup>9+</sup>](#workereventtarget9)替代。
1734e41f4b71Sopenharmony_ci
1735e41f4b71Sopenharmony_ci### addEventListener<sup>(deprecated)</sup>
1736e41f4b71Sopenharmony_ci
1737e41f4b71Sopenharmony_ciaddEventListener(type: string, listener: EventListener): void
1738e41f4b71Sopenharmony_ci
1739e41f4b71Sopenharmony_ci向Worker添加一个事件监听,该接口与[on<sup>(deprecated)</sup>](#ondeprecated)接口功能一致。
1740e41f4b71Sopenharmony_ci
1741e41f4b71Sopenharmony_ci> **说明:**<br/>
1742e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[addEventListener<sup>9+</sup>](#addeventlistener9)替代。
1743e41f4b71Sopenharmony_ci
1744e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1745e41f4b71Sopenharmony_ci
1746e41f4b71Sopenharmony_ci**参数:**
1747e41f4b71Sopenharmony_ci
1748e41f4b71Sopenharmony_ci| 参数名   | 类型                                      | 必填 | 说明             |
1749e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | ---- | ---------------- |
1750e41f4b71Sopenharmony_ci| type     | string                                    | 是   | 监听的事件类型。 |
1751e41f4b71Sopenharmony_ci| listener | [EventListener](#eventlistenerdeprecated) | 是   | 回调的事件。     |
1752e41f4b71Sopenharmony_ci
1753e41f4b71Sopenharmony_ci**示例:**
1754e41f4b71Sopenharmony_ci
1755e41f4b71Sopenharmony_ci```ts
1756e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1757e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{
1758e41f4b71Sopenharmony_ci    console.log("alert listener callback");
1759e41f4b71Sopenharmony_ci})
1760e41f4b71Sopenharmony_ci```
1761e41f4b71Sopenharmony_ci
1762e41f4b71Sopenharmony_ci
1763e41f4b71Sopenharmony_ci### removeEventListener<sup>(deprecated)</sup>
1764e41f4b71Sopenharmony_ci
1765e41f4b71Sopenharmony_ciremoveEventListener(type: string, callback?: EventListener): void
1766e41f4b71Sopenharmony_ci
1767e41f4b71Sopenharmony_ci删除Worker的事件监听,该接口与[off<sup>(deprecated)</sup>](#offdeprecated)接口功能一致。
1768e41f4b71Sopenharmony_ci
1769e41f4b71Sopenharmony_ci> **说明:**<br/>
1770e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[removeEventListener<sup>9+</sup>](#removeeventlistener9)替代。
1771e41f4b71Sopenharmony_ci
1772e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1773e41f4b71Sopenharmony_ci
1774e41f4b71Sopenharmony_ci**参数:**
1775e41f4b71Sopenharmony_ci
1776e41f4b71Sopenharmony_ci| 参数名   | 类型                                      | 必填 | 说明                     |
1777e41f4b71Sopenharmony_ci| -------- | ----------------------------------------- | ---- | ------------------------ |
1778e41f4b71Sopenharmony_ci| type     | string                                    | 是   | 需要删除的监听事件类型。 |
1779e41f4b71Sopenharmony_ci| callback | [EventListener](#eventlistenerdeprecated) | 否   | 删除监听事件后所执行的回调事件。 |
1780e41f4b71Sopenharmony_ci
1781e41f4b71Sopenharmony_ci**示例:**
1782e41f4b71Sopenharmony_ci
1783e41f4b71Sopenharmony_ci```ts
1784e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1785e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{
1786e41f4b71Sopenharmony_ci    console.log("alert listener callback");
1787e41f4b71Sopenharmony_ci})
1788e41f4b71Sopenharmony_ciworkerInstance.removeEventListener("alert");
1789e41f4b71Sopenharmony_ci```
1790e41f4b71Sopenharmony_ci
1791e41f4b71Sopenharmony_ci
1792e41f4b71Sopenharmony_ci### dispatchEvent<sup>(deprecated)</sup>
1793e41f4b71Sopenharmony_ci
1794e41f4b71Sopenharmony_cidispatchEvent(event: Event): boolean
1795e41f4b71Sopenharmony_ci
1796e41f4b71Sopenharmony_ci分发定义在Worker的事件。
1797e41f4b71Sopenharmony_ci
1798e41f4b71Sopenharmony_ci> **说明:**<br/>
1799e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[dispatchEvent<sup>9+</sup>](#dispatchevent9)替代。
1800e41f4b71Sopenharmony_ci
1801e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1802e41f4b71Sopenharmony_ci
1803e41f4b71Sopenharmony_ci**参数:**
1804e41f4b71Sopenharmony_ci
1805e41f4b71Sopenharmony_ci| 参数名 | 类型            | 必填 | 说明             |
1806e41f4b71Sopenharmony_ci| ------ | --------------- | ---- | ---------------- |
1807e41f4b71Sopenharmony_ci| event  | [Event](#event) | 是   | 需要分发的事件。 |
1808e41f4b71Sopenharmony_ci
1809e41f4b71Sopenharmony_ci**返回值:**
1810e41f4b71Sopenharmony_ci
1811e41f4b71Sopenharmony_ci| 类型    | 说明                            |
1812e41f4b71Sopenharmony_ci| ------- | ------------------------------- |
1813e41f4b71Sopenharmony_ci| boolean | 分发的结果,false表示分发失败。 |
1814e41f4b71Sopenharmony_ci
1815e41f4b71Sopenharmony_ci**示例:**
1816e41f4b71Sopenharmony_ci
1817e41f4b71Sopenharmony_ci```ts
1818e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1819e41f4b71Sopenharmony_ci
1820e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"eventType", timeStamp:0}); //timeStamp暂未支持。
1821e41f4b71Sopenharmony_ci```
1822e41f4b71Sopenharmony_ci
1823e41f4b71Sopenharmony_ci分发事件(dispatchEvent)可与监听接口(on、once、addEventListener)搭配使用,示例如下:
1824e41f4b71Sopenharmony_ci
1825e41f4b71Sopenharmony_ci```ts
1826e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1827e41f4b71Sopenharmony_ci
1828e41f4b71Sopenharmony_ci//用法一:
1829e41f4b71Sopenharmony_ciworkerInstance.on("alert_on", (e)=>{
1830e41f4b71Sopenharmony_ci    console.log("alert listener callback");
1831e41f4b71Sopenharmony_ci})
1832e41f4b71Sopenharmony_ciworkerInstance.once("alert_once", (e)=>{
1833e41f4b71Sopenharmony_ci    console.log("alert listener callback");
1834e41f4b71Sopenharmony_ci})
1835e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert_add", (e)=>{
1836e41f4b71Sopenharmony_ci    console.log("alert listener callback");
1837e41f4b71Sopenharmony_ci})
1838e41f4b71Sopenharmony_ci
1839e41f4b71Sopenharmony_ci//once接口创建的事件执行一次便会删除。
1840e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_once", timeStamp:0});//timeStamp暂未支持。
1841e41f4b71Sopenharmony_ci//on接口创建的事件可以一直被分发,不能主动删除。
1842e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_on", timeStamp:0});
1843e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_on", timeStamp:0});
1844e41f4b71Sopenharmony_ci//addEventListener接口创建的事件可以一直被分发,不能主动删除。
1845e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_add", timeStamp:0});
1846e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"alert_add", timeStamp:0});
1847e41f4b71Sopenharmony_ci
1848e41f4b71Sopenharmony_ci//用法二:
1849e41f4b71Sopenharmony_ci//event类型的type支持自定义,同时存在"message"/"messageerror"/"error"特殊类型,如下所示
1850e41f4b71Sopenharmony_ci//当type = "message",onmessage接口定义的方法同时会执行。
1851e41f4b71Sopenharmony_ci//当type = "messageerror",onmessageerror接口定义的方法同时会执行。
1852e41f4b71Sopenharmony_ci//当type = "error",onerror接口定义的方法同时会执行。
1853e41f4b71Sopenharmony_ci//若调用removeEventListener接口或者off接口取消事件时,能且只能取消使用addEventListener/on/once创建的事件。
1854e41f4b71Sopenharmony_ci
1855e41f4b71Sopenharmony_ciworkerInstance.addEventListener("message", (e)=>{
1856e41f4b71Sopenharmony_ci    console.log("message listener callback");
1857e41f4b71Sopenharmony_ci})
1858e41f4b71Sopenharmony_ciworkerInstance.onmessage = function(e) {
1859e41f4b71Sopenharmony_ci    console.log("onmessage : message listener callback");
1860e41f4b71Sopenharmony_ci}
1861e41f4b71Sopenharmony_ci//调用dispatchEvent分发“message”事件,addEventListener和onmessage中定义的方法都会被执行。
1862e41f4b71Sopenharmony_ciworkerInstance.dispatchEvent({type:"message", timeStamp:0});
1863e41f4b71Sopenharmony_ci```
1864e41f4b71Sopenharmony_ci### removeAllListener<sup>(deprecated)</sup>
1865e41f4b71Sopenharmony_ci
1866e41f4b71Sopenharmony_ciremoveAllListener(): void
1867e41f4b71Sopenharmony_ci
1868e41f4b71Sopenharmony_ci删除Worker所有的事件监听。
1869e41f4b71Sopenharmony_ci
1870e41f4b71Sopenharmony_ci> **说明:**<br/>
1871e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[removeAllListener<sup>9+</sup>](#removealllistener9)替代。
1872e41f4b71Sopenharmony_ci
1873e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1874e41f4b71Sopenharmony_ci
1875e41f4b71Sopenharmony_ci**示例:**
1876e41f4b71Sopenharmony_ci
1877e41f4b71Sopenharmony_ci```ts
1878e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1879e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{
1880e41f4b71Sopenharmony_ci    console.log("alert listener callback");
1881e41f4b71Sopenharmony_ci})
1882e41f4b71Sopenharmony_ciworkerInstance.removeAllListener();
1883e41f4b71Sopenharmony_ci```
1884e41f4b71Sopenharmony_ci
1885e41f4b71Sopenharmony_ci
1886e41f4b71Sopenharmony_ci## DedicatedWorkerGlobalScope<sup>(deprecated)</sup>
1887e41f4b71Sopenharmony_ci
1888e41f4b71Sopenharmony_ciWorker线程用于与宿主线程通信的类,通过postMessage接口发送消息给宿主线程、close接口销毁Worker线程。DedicatedWorkerGlobalScope类继承[WorkerGlobalScope](#workerglobalscopedeprecated)。
1889e41f4b71Sopenharmony_ci
1890e41f4b71Sopenharmony_ci> **说明:**<br/>
1891e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>](#threadworkerglobalscope9)替代。
1892e41f4b71Sopenharmony_ci
1893e41f4b71Sopenharmony_ci### postMessage<sup>(deprecated)</sup>
1894e41f4b71Sopenharmony_ci
1895e41f4b71Sopenharmony_cipostMessage(messageObject: Object, transfer: Transferable[]): void
1896e41f4b71Sopenharmony_ci
1897e41f4b71Sopenharmony_ciWorker线程通过转移对象所有权的方式向宿主线程发送消息。
1898e41f4b71Sopenharmony_ci
1899e41f4b71Sopenharmony_ci> **说明:**<br/>
1900e41f4b71Sopenharmony_ci> 此接口暂不支持使用,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>.postMessage<sup>9+</sup>](#postmessage9-2)替代。
1901e41f4b71Sopenharmony_ci
1902e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1903e41f4b71Sopenharmony_ci
1904e41f4b71Sopenharmony_ci**参数:**
1905e41f4b71Sopenharmony_ci
1906e41f4b71Sopenharmony_ci| 参数名  | 类型                                      | 必填 | 说明                                                         |
1907e41f4b71Sopenharmony_ci| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
1908e41f4b71Sopenharmony_ci| messageObject | Object                                    | 是   | 发送至宿主线程的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 |
1909e41f4b71Sopenharmony_ci| transfer| Transferable[]                            | 是   | 暂不支持该参数类型。                                         |
1910e41f4b71Sopenharmony_ci
1911e41f4b71Sopenharmony_ci### postMessage<sup>9+</sup>
1912e41f4b71Sopenharmony_ci
1913e41f4b71Sopenharmony_cipostMessage(messageObject: Object, transfer: ArrayBuffer[]): void
1914e41f4b71Sopenharmony_ci
1915e41f4b71Sopenharmony_ciWorker线程通过转移对象所有权的方式向宿主线程发送消息。
1916e41f4b71Sopenharmony_ci
1917e41f4b71Sopenharmony_ci> **说明:**<br/>
1918e41f4b71Sopenharmony_ci> DedicatedWorkerGlobalScope类自API version 9 开始废弃,本接口建议使用[ThreadWorkerGlobalScope<sup>9+</sup>.postMessage<sup>9+</sup>](#postmessage9-2)替代。
1919e41f4b71Sopenharmony_ci
1920e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1921e41f4b71Sopenharmony_ci
1922e41f4b71Sopenharmony_ci**参数:**
1923e41f4b71Sopenharmony_ci
1924e41f4b71Sopenharmony_ci| 参数名   | 类型          | 必填 | 说明                                                         |
1925e41f4b71Sopenharmony_ci| -------- | ------------- | ---- | ------------------------------------------------------------ |
1926e41f4b71Sopenharmony_ci| messageObject  | Object        | 是   | 发送至宿主线程的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 |
1927e41f4b71Sopenharmony_ci| transfer | ArrayBuffer[] | 是   | 表示可转移的ArrayBuffer实例对象数组,该数组中对象的所有权会被转移到宿主线程,在Worker线程中将会变为不可用,仅在宿主线程中可用,数组不可传入null。 |
1928e41f4b71Sopenharmony_ci
1929e41f4b71Sopenharmony_ci**示例:**
1930e41f4b71Sopenharmony_ci
1931e41f4b71Sopenharmony_ci```ts
1932e41f4b71Sopenharmony_ci// main thread
1933e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
1934e41f4b71Sopenharmony_ci
1935e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
1936e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world");
1937e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e): void => {
1938e41f4b71Sopenharmony_ci    // let data = e.data;
1939e41f4b71Sopenharmony_ci    console.log("receive data from worker.ets");
1940e41f4b71Sopenharmony_ci}
1941e41f4b71Sopenharmony_ci```
1942e41f4b71Sopenharmony_ci```ts
1943e41f4b71Sopenharmony_ci// worker.ets
1944e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
1945e41f4b71Sopenharmony_ci
1946e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort;
1947e41f4b71Sopenharmony_ciworkerPort.onmessage = (e): void => {
1948e41f4b71Sopenharmony_ci    // let data = e.data;
1949e41f4b71Sopenharmony_ci    let buffer = new ArrayBuffer(5)
1950e41f4b71Sopenharmony_ci    workerPort.postMessage(buffer, [buffer]);
1951e41f4b71Sopenharmony_ci}
1952e41f4b71Sopenharmony_ci```
1953e41f4b71Sopenharmony_ci
1954e41f4b71Sopenharmony_ci### postMessage<sup>(deprecated)</sup>
1955e41f4b71Sopenharmony_ci
1956e41f4b71Sopenharmony_cipostMessage(messageObject: Object, options?: PostMessageOptions): void
1957e41f4b71Sopenharmony_ci
1958e41f4b71Sopenharmony_ciWorker线程通过转移对象所有权或者拷贝数据的方式向宿主线程发送消息。
1959e41f4b71Sopenharmony_ci
1960e41f4b71Sopenharmony_ci> **说明:**<br/>
1961e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>.postMessage<sup>9+</sup>](#postmessage9-3)替代。
1962e41f4b71Sopenharmony_ci
1963e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
1964e41f4b71Sopenharmony_ci
1965e41f4b71Sopenharmony_ci**参数:**
1966e41f4b71Sopenharmony_ci
1967e41f4b71Sopenharmony_ci| 参数名  | 类型                                      | 必填 | 说明                                                         |
1968e41f4b71Sopenharmony_ci| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
1969e41f4b71Sopenharmony_ci| messageObject | Object                                    | 是   | 发送至宿主线程的数据,该数据对象必须是可序列化,序列化支持类型见[其他说明](#序列化支持类型)。 |
1970e41f4b71Sopenharmony_ci| options | [PostMessageOptions](#postmessageoptions) | 否   | 当填入该参数时,与传入ArrayBuffer[]的作用一致,该数组中对象的所有权会被转移到宿主线程,在Worker线程中将会变为不可用,仅在宿主线程中可用。<br/>若不填入该参数,默认设置为 undefined,通过拷贝数据的方式传输信息到宿主线程。 |
1971e41f4b71Sopenharmony_ci
1972e41f4b71Sopenharmony_ci**示例:**
1973e41f4b71Sopenharmony_ci
1974e41f4b71Sopenharmony_ci<!--no_check-->
1975e41f4b71Sopenharmony_ci```ts
1976e41f4b71Sopenharmony_ci// main thread
1977e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
1978e41f4b71Sopenharmony_ci
1979e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("entry/ets/workers/worker.ets");
1980e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world");
1981e41f4b71Sopenharmony_ciworkerInstance.onmessage = (): void => {
1982e41f4b71Sopenharmony_ci    console.log("receive data from worker.ets");
1983e41f4b71Sopenharmony_ci}
1984e41f4b71Sopenharmony_ci```
1985e41f4b71Sopenharmony_ci```ts
1986e41f4b71Sopenharmony_ci// worker.ets
1987e41f4b71Sopenharmony_ciimport { ErrorEvent, MessageEvents, worker } from '@kit.ArkTS';
1988e41f4b71Sopenharmony_ci
1989e41f4b71Sopenharmony_ciconst parentPort = worker.parentPort;
1990e41f4b71Sopenharmony_ciparentPort.onmessage = (e: MessageEvents) => {
1991e41f4b71Sopenharmony_ci  parentPort.postMessage("receive data from main thread");
1992e41f4b71Sopenharmony_ci}
1993e41f4b71Sopenharmony_ci```
1994e41f4b71Sopenharmony_ci
1995e41f4b71Sopenharmony_ci### close<sup>(deprecated)</sup>
1996e41f4b71Sopenharmony_ci
1997e41f4b71Sopenharmony_ciclose(): void
1998e41f4b71Sopenharmony_ci
1999e41f4b71Sopenharmony_ci销毁Worker线程,终止Worker接收消息。
2000e41f4b71Sopenharmony_ci
2001e41f4b71Sopenharmony_ci> **说明:**<br/>
2002e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>.close<sup>9+</sup>](#close9)替代。
2003e41f4b71Sopenharmony_ci
2004e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
2005e41f4b71Sopenharmony_ci
2006e41f4b71Sopenharmony_ci**示例:**
2007e41f4b71Sopenharmony_ci
2008e41f4b71Sopenharmony_ci```ts
2009e41f4b71Sopenharmony_ci// main thread
2010e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
2011e41f4b71Sopenharmony_ci
2012e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
2013e41f4b71Sopenharmony_ci```
2014e41f4b71Sopenharmony_ci```ts
2015e41f4b71Sopenharmony_ci// worker.ets
2016e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
2017e41f4b71Sopenharmony_ci
2018e41f4b71Sopenharmony_ciconst parentPort = worker.parentPort;
2019e41f4b71Sopenharmony_ciparentPort.onmessage = (e): void => {
2020e41f4b71Sopenharmony_ci    parentPort.close()
2021e41f4b71Sopenharmony_ci}
2022e41f4b71Sopenharmony_ci```
2023e41f4b71Sopenharmony_ci
2024e41f4b71Sopenharmony_ci
2025e41f4b71Sopenharmony_ci### onmessage<sup>(deprecated)</sup>
2026e41f4b71Sopenharmony_ci
2027e41f4b71Sopenharmony_cionmessage?: (this: DedicatedWorkerGlobalScope, ev: MessageEvent) =&gt; void
2028e41f4b71Sopenharmony_ci
2029e41f4b71Sopenharmony_ci回调函数,DedicatedWorkerGlobalScope的onmessage属性表示Worker线程收到来自其宿主线程通过postMessage接口发送的消息时被调用的事件处理程序,处理程序在Worker线程中执行。其中this指调用者对象本身[DedicatedWorkerGlobalScope](#dedicatedworkerglobalscopedeprecated),ev类型为[MessageEvent](#messageeventt),表示收到的Worker消息数据。
2030e41f4b71Sopenharmony_ci
2031e41f4b71Sopenharmony_ci> **说明:**<br/>
2032e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>.onmessage<sup>9+</sup>](#onmessage9-1)替代。
2033e41f4b71Sopenharmony_ci
2034e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
2035e41f4b71Sopenharmony_ci
2036e41f4b71Sopenharmony_ci**示例:**
2037e41f4b71Sopenharmony_ci
2038e41f4b71Sopenharmony_ci```ts
2039e41f4b71Sopenharmony_ci// main thread
2040e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
2041e41f4b71Sopenharmony_ci
2042e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
2043e41f4b71Sopenharmony_ciworkerInstance.postMessage("hello world");
2044e41f4b71Sopenharmony_ci```
2045e41f4b71Sopenharmony_ci```ts
2046e41f4b71Sopenharmony_ci// worker.ets
2047e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
2048e41f4b71Sopenharmony_ci
2049e41f4b71Sopenharmony_ciconst parentPort = worker.parentPort;
2050e41f4b71Sopenharmony_ciparentPort.onmessage = (e): void => {
2051e41f4b71Sopenharmony_ci    console.log("receive main thread message");
2052e41f4b71Sopenharmony_ci}
2053e41f4b71Sopenharmony_ci```
2054e41f4b71Sopenharmony_ci
2055e41f4b71Sopenharmony_ci
2056e41f4b71Sopenharmony_ci### onmessageerror<sup>(deprecated)</sup>
2057e41f4b71Sopenharmony_ci
2058e41f4b71Sopenharmony_cionmessageerror?: (this: DedicatedWorkerGlobalScope, ev: MessageEvent) =&gt; void
2059e41f4b71Sopenharmony_ci
2060e41f4b71Sopenharmony_ciDedicatedWorkerGlobalScope的onmessageerror属性表示当Worker对象接收到一条无法被反序列化的消息时被调用的事件处理程序,处理程序在Worker线程中执行。其中this指调用者对象本身[DedicatedWorkerGlobalScope](#threadworkerglobalscope9),ev类型为[MessageEvent](#dedicatedworkerglobalscopedeprecated),表示收到的Worker消息数据。
2061e41f4b71Sopenharmony_ci
2062e41f4b71Sopenharmony_ci> **说明:**<br/>
2063e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[ThreadWorkerGlobalScope<sup>9+</sup>.onmessageerror<sup>9+</sup>](#onmessageerror9-1)替代。
2064e41f4b71Sopenharmony_ci
2065e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
2066e41f4b71Sopenharmony_ci
2067e41f4b71Sopenharmony_ci**示例:**
2068e41f4b71Sopenharmony_ci
2069e41f4b71Sopenharmony_ci```ts
2070e41f4b71Sopenharmony_ci// main thread
2071e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
2072e41f4b71Sopenharmony_ci
2073e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
2074e41f4b71Sopenharmony_ci```
2075e41f4b71Sopenharmony_ci```ts
2076e41f4b71Sopenharmony_ci// worker.ets
2077e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
2078e41f4b71Sopenharmony_ci
2079e41f4b71Sopenharmony_ciconst parentPort = worker.parentPort;
2080e41f4b71Sopenharmony_ciparentPort.onmessageerror = (e) => {
2081e41f4b71Sopenharmony_ci    console.log("worker.ets onmessageerror")
2082e41f4b71Sopenharmony_ci}
2083e41f4b71Sopenharmony_ci```
2084e41f4b71Sopenharmony_ci
2085e41f4b71Sopenharmony_ci
2086e41f4b71Sopenharmony_ci## PostMessageOptions
2087e41f4b71Sopenharmony_ci
2088e41f4b71Sopenharmony_ci明确数据传递过程中需要转移所有权对象的类,传递所有权的对象必须是ArrayBuffer,发送它的上下文中将会变为不可用,仅在接收方可用。
2089e41f4b71Sopenharmony_ci
2090e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
2091e41f4b71Sopenharmony_ci
2092e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
2093e41f4b71Sopenharmony_ci
2094e41f4b71Sopenharmony_ci| 名称     | 类型     | 可读 | 可写 | 说明                              |
2095e41f4b71Sopenharmony_ci| -------- | -------- | ---- | ---- | --------------------------------- |
2096e41f4b71Sopenharmony_ci| transfer | Object[] | 是   | 是   | ArrayBuffer数组,用于传递所有权。该数组中不可传入null。 |
2097e41f4b71Sopenharmony_ci
2098e41f4b71Sopenharmony_ci
2099e41f4b71Sopenharmony_ci## Event
2100e41f4b71Sopenharmony_ci
2101e41f4b71Sopenharmony_ci事件类。
2102e41f4b71Sopenharmony_ci
2103e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12 开始,该接口支持在原子化服务中使用。
2104e41f4b71Sopenharmony_ci
2105e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
2106e41f4b71Sopenharmony_ci
2107e41f4b71Sopenharmony_ci| 名称      | 类型   | 可读 | 可写 | 说明                                         |
2108e41f4b71Sopenharmony_ci| --------- | ------ | ---- | ---- | -------------------------------------------- |
2109e41f4b71Sopenharmony_ci| type      | string | 是   | 否   | 指定事件的类型。                             |
2110e41f4b71Sopenharmony_ci| timeStamp | number | 是   | 否   | 事件创建时的时间戳(精度为毫秒),暂未支持。 |
2111e41f4b71Sopenharmony_ci
2112e41f4b71Sopenharmony_ci
2113e41f4b71Sopenharmony_ci## EventListener<sup>(deprecated)</sup>
2114e41f4b71Sopenharmony_ci
2115e41f4b71Sopenharmony_ci事件监听类。
2116e41f4b71Sopenharmony_ci
2117e41f4b71Sopenharmony_ci> **说明:**
2118e41f4b71Sopenharmony_ci>
2119e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[WorkerEventListener<sup>9+</sup>](#workereventlistener9)替代。
2120e41f4b71Sopenharmony_ci
2121e41f4b71Sopenharmony_ci### (evt: Event)<sup>(deprecated)</sup>
2122e41f4b71Sopenharmony_ci
2123e41f4b71Sopenharmony_ci(evt: Event): void | Promise&lt;void&gt;
2124e41f4b71Sopenharmony_ci
2125e41f4b71Sopenharmony_ci> **说明:**
2126e41f4b71Sopenharmony_ci>
2127e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[(event:Event)<sup>9+</sup>](#event-event9)替代。
2128e41f4b71Sopenharmony_ci
2129e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
2130e41f4b71Sopenharmony_ci
2131e41f4b71Sopenharmony_ci**参数:**
2132e41f4b71Sopenharmony_ci
2133e41f4b71Sopenharmony_ci| 参数名 | 类型            | 必填 | 说明           |
2134e41f4b71Sopenharmony_ci| ------ | --------------- | ---- | -------------- |
2135e41f4b71Sopenharmony_ci| evt    | [Event](#event) | 是   | 回调的事件类。 |
2136e41f4b71Sopenharmony_ci
2137e41f4b71Sopenharmony_ci**返回值:**
2138e41f4b71Sopenharmony_ci
2139e41f4b71Sopenharmony_ci| 类型                                  | 说明                            |
2140e41f4b71Sopenharmony_ci| ------------------------------------- | ------------------------------- |
2141e41f4b71Sopenharmony_ci| void&nbsp;\|&nbsp;Promise&lt;void&gt; | 无返回值或者以Promise形式返回。 |
2142e41f4b71Sopenharmony_ci
2143e41f4b71Sopenharmony_ci**示例:**
2144e41f4b71Sopenharmony_ci
2145e41f4b71Sopenharmony_ci```ts
2146e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets");
2147e41f4b71Sopenharmony_ciworkerInstance.addEventListener("alert", (e)=>{
2148e41f4b71Sopenharmony_ci    console.log("alert listener callback");
2149e41f4b71Sopenharmony_ci})
2150e41f4b71Sopenharmony_ci```
2151e41f4b71Sopenharmony_ci
2152e41f4b71Sopenharmony_ci
2153e41f4b71Sopenharmony_ci## ErrorEvent
2154e41f4b71Sopenharmony_ci
2155e41f4b71Sopenharmony_ci错误事件类,用于表示Worker执行过程中出现异常的详细信息,ErrorEvent类继承[Event](#event)。
2156e41f4b71Sopenharmony_ci
2157e41f4b71Sopenharmony_ci**原子化服务API**:从API version 11 开始,该接口支持在原子化服务中使用。
2158e41f4b71Sopenharmony_ci
2159e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
2160e41f4b71Sopenharmony_ci
2161e41f4b71Sopenharmony_ci| 名称     | 类型   | 可读 | 可写 | 说明                 |
2162e41f4b71Sopenharmony_ci| -------- | ------ | ---- | ---- | -------------------- |
2163e41f4b71Sopenharmony_ci| message  | string | 是   | 否   | 异常发生的错误信息。 |
2164e41f4b71Sopenharmony_ci| filename | string | 是   | 否   | 出现异常所在的文件。 |
2165e41f4b71Sopenharmony_ci| lineno   | number | 是   | 否   | 异常所在的行数。     |
2166e41f4b71Sopenharmony_ci| colno    | number | 是   | 否   | 异常所在的列数。     |
2167e41f4b71Sopenharmony_ci| error    | Object | 是   | 否   | 异常类型。           |
2168e41f4b71Sopenharmony_ci
2169e41f4b71Sopenharmony_ci
2170e41f4b71Sopenharmony_ci## MessageEvent\<T\>
2171e41f4b71Sopenharmony_ci
2172e41f4b71Sopenharmony_ci消息类,持有Worker线程间传递的数据。
2173e41f4b71Sopenharmony_ci
2174e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
2175e41f4b71Sopenharmony_ci
2176e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
2177e41f4b71Sopenharmony_ci
2178e41f4b71Sopenharmony_ci| 名称 | 类型 | 可读 | 可写 | 说明               |
2179e41f4b71Sopenharmony_ci| ---- | ---- | ---- | ---- | ------------------ |
2180e41f4b71Sopenharmony_ci| data | T    | 是   | 否   | 线程间传递的数据。 |
2181e41f4b71Sopenharmony_ci
2182e41f4b71Sopenharmony_ci
2183e41f4b71Sopenharmony_ci## WorkerGlobalScope<sup>(deprecated)</sup>
2184e41f4b71Sopenharmony_ci
2185e41f4b71Sopenharmony_ciWorker线程自身的运行环境,WorkerGlobalScope类继承[EventTarget](#eventtargetdeprecated)。
2186e41f4b71Sopenharmony_ci
2187e41f4b71Sopenharmony_ci> **说明:**<br/>
2188e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[GlobalScope<sup>9+</sup>](#globalscope9)替代。
2189e41f4b71Sopenharmony_ci
2190e41f4b71Sopenharmony_ci### 属性
2191e41f4b71Sopenharmony_ci
2192e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
2193e41f4b71Sopenharmony_ci
2194e41f4b71Sopenharmony_ci| 名称 | 类型                                                         | 可读 | 可写 | 说明                                  |
2195e41f4b71Sopenharmony_ci| ---- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------- |
2196e41f4b71Sopenharmony_ci| name | string                                                       | 是   | 否   | Worker的名字,new&nbsp;Worker时指定。 |
2197e41f4b71Sopenharmony_ci| self | [WorkerGlobalScope](#workerglobalscopedeprecated)&nbsp;&amp;&nbsp;typeof&nbsp;globalThis | 是   | 否   | WorkerGlobalScope本身。               |
2198e41f4b71Sopenharmony_ci
2199e41f4b71Sopenharmony_ci
2200e41f4b71Sopenharmony_ci### onerror<sup>(deprecated)</sup>
2201e41f4b71Sopenharmony_ci
2202e41f4b71Sopenharmony_cionerror?: (ev: ErrorEvent) =&gt; void
2203e41f4b71Sopenharmony_ci
2204e41f4b71Sopenharmony_ciWorkerGlobalScope的onerror属性表示Worker在执行过程中发生异常被调用的事件处理程序,处理程序在Worker线程中执行。其中回调函数中ev类型为[ErrorEvent](#errorevent),表示收到的异常数据。
2205e41f4b71Sopenharmony_ci
2206e41f4b71Sopenharmony_ci> **说明:**<br/>
2207e41f4b71Sopenharmony_ci> 从API version 7 开始支持,从API version 9 开始废弃,建议使用[GlobalScope<sup>9+</sup>.onerror<sup>9+</sup>](#onerror9-1)替代。
2208e41f4b71Sopenharmony_ci
2209e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.Utils.Lang
2210e41f4b71Sopenharmony_ci
2211e41f4b71Sopenharmony_ci**示例:**
2212e41f4b71Sopenharmony_ci
2213e41f4b71Sopenharmony_ci```ts
2214e41f4b71Sopenharmony_ci// main thread
2215e41f4b71Sopenharmony_ciimport { worker } from '@kit.ArkTS';
2216e41f4b71Sopenharmony_ci
2217e41f4b71Sopenharmony_ciconst workerInstance = new worker.Worker("workers/worker.ets")
2218e41f4b71Sopenharmony_ci```
2219e41f4b71Sopenharmony_ci```ts
2220e41f4b71Sopenharmony_ci// worker.ets
2221e41f4b71Sopenharmony_ciimport { worker, ErrorEvent } from '@kit.ArkTS';
2222e41f4b71Sopenharmony_ci
2223e41f4b71Sopenharmony_ciconst parentPort = worker.parentPort
2224e41f4b71Sopenharmony_ciparentPort.onerror = (err: ErrorEvent) => {
2225e41f4b71Sopenharmony_ci    console.log("worker.ets onerror" + err.message)
2226e41f4b71Sopenharmony_ci}
2227e41f4b71Sopenharmony_ci```
2228e41f4b71Sopenharmony_ci
2229e41f4b71Sopenharmony_ci
2230e41f4b71Sopenharmony_ci## 其他说明
2231e41f4b71Sopenharmony_ci
2232e41f4b71Sopenharmony_ci### 序列化支持类型
2233e41f4b71Sopenharmony_ci
2234e41f4b71Sopenharmony_ci序列化支持类型包括:除Symbol之外的基础类型、Date、String、RegExp、Array、Map、Set、Object(仅限简单对象,比如通过"{}"或者"new Object"创建,普通对象仅支持传递属性,不支持传递其原型及方法)、ArrayBuffer、TypedArray。
2235e41f4b71Sopenharmony_ci
2236e41f4b71Sopenharmony_ci特例:传递通过自定义class创建出来的object时,不会发生序列化错误,但是自定义class的属性(如Function)无法通过序列化传递。
2237e41f4b71Sopenharmony_ci> **说明:**<br/>
2238e41f4b71Sopenharmony_ci> 以API version 9的FA工程为例。
2239e41f4b71Sopenharmony_ci
2240e41f4b71Sopenharmony_ci```ts
2241e41f4b71Sopenharmony_ci// main thread
2242e41f4b71Sopenharmony_ciimport { worker, MessageEvents } from '@kit.ArkTS';
2243e41f4b71Sopenharmony_ci
2244e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("workers/worker.ets");
2245e41f4b71Sopenharmony_ciworkerInstance.postMessage("message from main thread to worker");
2246e41f4b71Sopenharmony_ciworkerInstance.onmessage = (d: MessageEvents): void => {
2247e41f4b71Sopenharmony_ci  // 当worker线程传递obj2时,data即为obj2。data没有Init、SetName的方法
2248e41f4b71Sopenharmony_ci  let data: string  = d.data;
2249e41f4b71Sopenharmony_ci}
2250e41f4b71Sopenharmony_ci```
2251e41f4b71Sopenharmony_ci```ts
2252e41f4b71Sopenharmony_ci// worker.ets
2253e41f4b71Sopenharmony_ciimport { worker, MessageEvents, ErrorEvent } from '@kit.ArkTS';
2254e41f4b71Sopenharmony_ci
2255e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort;
2256e41f4b71Sopenharmony_ciclass MyModel {
2257e41f4b71Sopenharmony_ci    name = "undefined"
2258e41f4b71Sopenharmony_ci    Init() {
2259e41f4b71Sopenharmony_ci        this.name = "MyModel"
2260e41f4b71Sopenharmony_ci    }
2261e41f4b71Sopenharmony_ci}
2262e41f4b71Sopenharmony_ciworkerPort.onmessage = (d: MessageEvents): void => {
2263e41f4b71Sopenharmony_ci  console.log("worker.ets onmessage");
2264e41f4b71Sopenharmony_ci  let data: string = d.data;
2265e41f4b71Sopenharmony_ci  let func1 = () => {
2266e41f4b71Sopenharmony_ci    console.log("post message is function");
2267e41f4b71Sopenharmony_ci  }
2268e41f4b71Sopenharmony_ci  // workerPort.postMessage(func1); 传递func1发生序列化错误
2269e41f4b71Sopenharmony_ci  // let obj1: obj | null = null;
2270e41f4b71Sopenharmony_ci  // if (obj1) {
2271e41f4b71Sopenharmony_ci  //   workerPort.postMessage(obj1 as obj);  //传递obj1发生序列化错误
2272e41f4b71Sopenharmony_ci  // }
2273e41f4b71Sopenharmony_ci  let obj2 = new MyModel();
2274e41f4b71Sopenharmony_ci  workerPort.postMessage(obj2);     // 传递obj2不会发生序列化错误
2275e41f4b71Sopenharmony_ci}
2276e41f4b71Sopenharmony_ciworkerPort.onmessageerror = () => {
2277e41f4b71Sopenharmony_ci    console.log("worker.ets onmessageerror");
2278e41f4b71Sopenharmony_ci}
2279e41f4b71Sopenharmony_ciworkerPort.onerror = (err: ErrorEvent) => {
2280e41f4b71Sopenharmony_ci    console.log("worker.ets onerror" + err.message);
2281e41f4b71Sopenharmony_ci}
2282e41f4b71Sopenharmony_ci```
2283e41f4b71Sopenharmony_ci
2284e41f4b71Sopenharmony_ci### 内存模型
2285e41f4b71Sopenharmony_ciWorker基于Actor并发模型实现。在Worker的交互流程中,JS主线程可以创建多个Worker子线程,各个Worker线程间相互隔离,并通过序列化传递对象,等到Worker线程完成计算任务,再把结果返回给主线程。
2286e41f4b71Sopenharmony_ci
2287e41f4b71Sopenharmony_ciActor并发模型的交互原理:各个Actor并发地处理主线程任务,每个Actor内部都有一个消息队列及单线程执行模块,消息队列负责接收主线程及其他Actor的请求,单线程执行模块则负责串行地处理请求、向其他Actor发送请求以及创建新的Actor。由于Actor采用的是异步方式,各个Actor之间相互隔离没有数据竞争,因此Actor可以高并发运行。
2288e41f4b71Sopenharmony_ci
2289e41f4b71Sopenharmony_ci## 完整示例
2290e41f4b71Sopenharmony_ci> **说明:**<br/>
2291e41f4b71Sopenharmony_ci> 以API version 9的工程为例。<br> API version 8及之前的版本仅支持FA模型,如需使用,注意更换构造Worker的接口和创建worker线程中与主线程通信的对象的两个方法。
2292e41f4b71Sopenharmony_ci### FA模型
2293e41f4b71Sopenharmony_ci
2294e41f4b71Sopenharmony_ci```ts
2295e41f4b71Sopenharmony_ci// main thread(同级目录为例)
2296e41f4b71Sopenharmony_ciimport { worker, MessageEvents, ErrorEvent } from '@kit.ArkTS';
2297e41f4b71Sopenharmony_ci
2298e41f4b71Sopenharmony_ci// 主线程中创建Worker对象
2299e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("workers/worker.ets");
2300e41f4b71Sopenharmony_ci
2301e41f4b71Sopenharmony_ci// 主线程向worker线程传递信息
2302e41f4b71Sopenharmony_ciworkerInstance.postMessage("123");
2303e41f4b71Sopenharmony_ci
2304e41f4b71Sopenharmony_ci// 主线程接收worker线程信息
2305e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => {
2306e41f4b71Sopenharmony_ci    // data:worker线程发送的信息
2307e41f4b71Sopenharmony_ci    let data: string = e.data;
2308e41f4b71Sopenharmony_ci    console.log("main thread onmessage");
2309e41f4b71Sopenharmony_ci
2310e41f4b71Sopenharmony_ci    // 销毁Worker对象
2311e41f4b71Sopenharmony_ci    workerInstance.terminate();
2312e41f4b71Sopenharmony_ci}
2313e41f4b71Sopenharmony_ci
2314e41f4b71Sopenharmony_ci// 在调用terminate后,执行回调onexit
2315e41f4b71Sopenharmony_ciworkerInstance.onexit = (code) => {
2316e41f4b71Sopenharmony_ci    console.log("main thread terminate");
2317e41f4b71Sopenharmony_ci}
2318e41f4b71Sopenharmony_ci
2319e41f4b71Sopenharmony_ciworkerInstance.onerror = (err: ErrorEvent) => {
2320e41f4b71Sopenharmony_ci    console.log("main error message " + err.message);
2321e41f4b71Sopenharmony_ci}
2322e41f4b71Sopenharmony_ci```
2323e41f4b71Sopenharmony_ci```ts
2324e41f4b71Sopenharmony_ci// worker.ets
2325e41f4b71Sopenharmony_ciimport { worker, MessageEvents, ErrorEvent } from '@kit.ArkTS';
2326e41f4b71Sopenharmony_ci
2327e41f4b71Sopenharmony_ci// 创建worker线程中与主线程通信的对象
2328e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort
2329e41f4b71Sopenharmony_ci
2330e41f4b71Sopenharmony_ci// worker线程接收主线程信息
2331e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => {
2332e41f4b71Sopenharmony_ci    // data:主线程发送的信息
2333e41f4b71Sopenharmony_ci    let data: string = e.data;
2334e41f4b71Sopenharmony_ci    console.log("worker.ets onmessage");
2335e41f4b71Sopenharmony_ci
2336e41f4b71Sopenharmony_ci    // worker线程向主线程发送信息
2337e41f4b71Sopenharmony_ci    workerPort.postMessage("123")
2338e41f4b71Sopenharmony_ci}
2339e41f4b71Sopenharmony_ci
2340e41f4b71Sopenharmony_ci// worker线程发生error的回调
2341e41f4b71Sopenharmony_ciworkerPort.onerror = (err: ErrorEvent) => {
2342e41f4b71Sopenharmony_ci    console.log("worker.ets onerror");
2343e41f4b71Sopenharmony_ci}
2344e41f4b71Sopenharmony_ci```
2345e41f4b71Sopenharmony_cibuild-profile.json5 配置 :
2346e41f4b71Sopenharmony_ci```json
2347e41f4b71Sopenharmony_ci  "buildOption": {
2348e41f4b71Sopenharmony_ci    "sourceOption": {
2349e41f4b71Sopenharmony_ci      "workers": [
2350e41f4b71Sopenharmony_ci        "./src/main/ets/entryability/workers/worker.ets"
2351e41f4b71Sopenharmony_ci      ]
2352e41f4b71Sopenharmony_ci    }
2353e41f4b71Sopenharmony_ci  }
2354e41f4b71Sopenharmony_ci```
2355e41f4b71Sopenharmony_ci### Stage模型
2356e41f4b71Sopenharmony_ci```ts
2357e41f4b71Sopenharmony_ci// main thread(以不同目录为例)
2358e41f4b71Sopenharmony_ciimport { worker, MessageEvents, ErrorEvent } from '@kit.ArkTS';
2359e41f4b71Sopenharmony_ci
2360e41f4b71Sopenharmony_ci// 主线程中创建Worker对象
2361e41f4b71Sopenharmony_ciconst workerInstance = new worker.ThreadWorker("entry/ets/pages/workers/worker.ets");
2362e41f4b71Sopenharmony_ci
2363e41f4b71Sopenharmony_ci// 主线程向worker线程传递信息
2364e41f4b71Sopenharmony_ciworkerInstance.postMessage("123");
2365e41f4b71Sopenharmony_ci
2366e41f4b71Sopenharmony_ci// 主线程接收worker线程信息
2367e41f4b71Sopenharmony_ciworkerInstance.onmessage = (e: MessageEvents): void => {
2368e41f4b71Sopenharmony_ci    // data:worker线程发送的信息
2369e41f4b71Sopenharmony_ci    let data: string = e.data;
2370e41f4b71Sopenharmony_ci    console.log("main thread onmessage");
2371e41f4b71Sopenharmony_ci
2372e41f4b71Sopenharmony_ci    // 销毁Worker对象
2373e41f4b71Sopenharmony_ci    workerInstance.terminate();
2374e41f4b71Sopenharmony_ci}
2375e41f4b71Sopenharmony_ci// 在调用terminate后,执行onexit
2376e41f4b71Sopenharmony_ciworkerInstance.onexit = (code) => {
2377e41f4b71Sopenharmony_ci    console.log("main thread terminate");
2378e41f4b71Sopenharmony_ci}
2379e41f4b71Sopenharmony_ci
2380e41f4b71Sopenharmony_ciworkerInstance.onerror = (err: ErrorEvent) => {
2381e41f4b71Sopenharmony_ci    console.log("main error message " + err.message);
2382e41f4b71Sopenharmony_ci}
2383e41f4b71Sopenharmony_ci```
2384e41f4b71Sopenharmony_ci```ts
2385e41f4b71Sopenharmony_ci// worker.ets
2386e41f4b71Sopenharmony_ciimport { worker, MessageEvents, ErrorEvent } from '@kit.ArkTS';
2387e41f4b71Sopenharmony_ci
2388e41f4b71Sopenharmony_ci// 创建worker线程中与主线程通信的对象
2389e41f4b71Sopenharmony_ciconst workerPort = worker.workerPort
2390e41f4b71Sopenharmony_ci
2391e41f4b71Sopenharmony_ci// worker线程接收主线程信息
2392e41f4b71Sopenharmony_ciworkerPort.onmessage = (e: MessageEvents): void => {
2393e41f4b71Sopenharmony_ci    // data:主线程发送的信息
2394e41f4b71Sopenharmony_ci    let data: string = e.data;
2395e41f4b71Sopenharmony_ci    console.log("worker.ets onmessage");
2396e41f4b71Sopenharmony_ci
2397e41f4b71Sopenharmony_ci    // worker线程向主线程发送信息
2398e41f4b71Sopenharmony_ci    workerPort.postMessage("123")
2399e41f4b71Sopenharmony_ci}
2400e41f4b71Sopenharmony_ci
2401e41f4b71Sopenharmony_ci// worker线程发生error的回调
2402e41f4b71Sopenharmony_ciworkerPort.onerror = (err: ErrorEvent) => {
2403e41f4b71Sopenharmony_ci    console.log("worker.ets onerror" + err.message);
2404e41f4b71Sopenharmony_ci}
2405e41f4b71Sopenharmony_ci```
2406e41f4b71Sopenharmony_cibuild-profile.json5 配置:
2407e41f4b71Sopenharmony_ci```json
2408e41f4b71Sopenharmony_ci  "buildOption": {
2409e41f4b71Sopenharmony_ci    "sourceOption": {
2410e41f4b71Sopenharmony_ci      "workers": [
2411e41f4b71Sopenharmony_ci        "./src/main/ets/pages/workers/worker.ets"
2412e41f4b71Sopenharmony_ci      ]
2413e41f4b71Sopenharmony_ci    }
2414e41f4b71Sopenharmony_ci  }
2415e41f4b71Sopenharmony_ci```
2416e41f4b71Sopenharmony_ci<!--no_check-->
2417