2

我正在尝试获取(通过获取我的意思是创建一个新的)一个类的实例。这就是我所做的:

file_one.dart

import 'dart:isolate';

void main() {
  SendPort sendPort = spawnUri('file_two.dart');
  sendPort.call('get new instance')
    .then(print);
}

file_two.dart

import 'dart:isolate';
import 'dart:mirrors';

class TestClass {}

void main() {
  port.receive((message, SendPort replyTo) {
    MirrorSystem current = currentMirrorSystem();
    LibraryMirror isolate = current.isolate.rootLibrary;
    Map classes = isolate.classes;
    ClassMirror test = classes[const Symbol('TestClass')];
    TestClass testClass = test.newInstance(const Symbol(''), []).reflectee;
    replyTo.send(testClass);
  });
}

它什么也不打印,但如果我发送一个字符串,例如'SomeString',它会打印'SomeString'。任何解决方法?

4

1 回答 1

4

testClass不能通过端口发送,因为根据dart:isolate - Concurrency with Isolates

消息的内容可以是以下任何一种:

  • 原始值(null、num、bool、double、String)
  • SendPort 的一个实例
  • 一个列表或映射,其元素是上述任何一个,包括其他列表和映射
  • 特殊情况下,任何类型的对象

还有一个问题是允许 Dart 的 Isolates 的 Transferable Objects将来可能会改变这种行为。

于 2013-08-09T07:21:13.823 回答