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