我在
Flutter (Dart)
上编写了应用程序,并且集成了 FFI
库。我需要在单独的 Isolate
上调用该库中的方法,但它给了我以下错误:
Unhandled Exception: Invalid argument(s): Illegal argument in isolate message: (object is a DynamicLibrary)
这是我的代码:
class Hub {
static final Hub _singleton = Hub._internal();
late hub lib;
late Pointer<hub_state_s> state;
factory Hub() {
return _singleton;
}
Hub._internal();
}
start() async {
Hub hub = Hub();
var initResult = await hub.init();
if (initResult == 0) {
await Isolate.run(() {
print("running isolate");
hub.lib.hub_start(hub.state);
});
}
}
原生资源无法发送,请参阅https://dart.dev/language/concurrency#message-types
start() async {
Hub hub = Hub();
var initResult = await hub.init();
if (initResult == 0) {
await Isolate.run(() {
print("running isolate");
hub.lib.hub_start(hub.state);
});
}
}
这里您通过闭包发送集线器实例以进行隔离,因此消息是
未处理的异常:无效参数:隔离消息中的非法参数:(对象是 DynamicLibrary)
正如 Richard 上面所说,请随意在 Isolate 中打开一个新的 DynamicLibrary,如 document 所说
使用相同的路径多次调用此函数,即使跨不同的隔离区,也只会将库加载到 DartVM 进程中一次。多次加载同一库文件会生成相等 (==) 但不相同的 DynamicLibrary 对象。