Isolate 单项通信《新线程发消息给主线程<mian>》
main(){
///创建接收端口
ReceivePort r1 = ReceivePort();
///创建发送端口
SendPort p1 = r1.sendPort;
///参数1(isoFunc0 -> 函数参数1传入发送端口对象 ) => 静态函数或顶级函数,参数2(p1) => 发送端口对象
Isolate.spawn(isoFunc0, p1);
///接收新线程发送过来的消息
// 第一种接收方法
var msg = r1.first.then((value) => print("来自新线程的消息 $value"));
///第二种接收方法
r1.listen((message) {
print(message);
// r1.close(); //结束新线程
});
}
///新线程函数
void isoFunc0(SendPort p1) {
p1.send("当前线程名称: ${Isolate.current.debugName}");
}
Isolate 双向通信<新线程发消息给主线程|主线程发消息给新线程>
main{
//创建接收端口
ReceivePort r1 = ReceivePort();
//创建发送端口
SendPort p1 = r1.sendPort;
//参数1(isoFunc0 -> 函数参数1传入发送端口对象 ) => 静态函数或顶级函数|参数2(p1) => 发送端口对象
Isolate.spawn(isoFunc0, p1);
//接收新线程发送来的消息
r1.listen((message) {
//由于可接收任何类型的消息所以判断下类型在发送给新线程
if (message is SendPort) {
message.send("主线程发消息给新线程: ${Isolate.current.debugName}");
}else{
print(message);
}
// r1.close(); //结束新线程,结束后将不能通信
});
}
///新线程函数
void isoFunc0(SendPort p1) {
p1.send("新线程给主线程发消息: ${Isolate.current.debugName}");
//创建接收端口
ReceivePort r2 = ReceivePort();
//创建发送端口
SendPort p2 = r2.sendPort;
//把发送端口对象->发消息给主线程
p1.send(p2);
//接收主线程发来的消息
r2.listen((message) {
print(message);
// r2.close(); //结束新线程,结束后将不能通信
});
}
THE END