我有这个示例C#
代码,它连接到 Tobii EyeX 眼动追踪设备的 EyeX 引擎,订阅注视数据流并将结果写入控制台。
var eyeXHost = new EyeXHost();
var stream = eyeXHost.CreateGazePointDataStream(GazePointDataMode.LightlyFiltered);
eyeXHost.Start();
stream.Next += (s, e) => Console.WriteLine("Gaze point at ({0:0.0}, {1:0.0}) @{2:0}", e.X, e.Y, e.Timestamp);
Console.In.Read();
我在Edge.js的帮助下从 Node.js 脚本调用此代码。我能够让它工作,但我发现我必须以我不完全理解的方式修改代码。
var eyeXHost = new EyeXHost();
var stream = eyeXHost.CreateGazePointDataStream(GazePointDataMode.LightlyFiltered);
await Task.Run(() => eyeXHost.Start());
stream.Next += async (s, e) => {
await onGazePoint(new GazePoint(e.X, e.Y, e.Timestamp));
};
也就是说,我不得不打eyeXHost.Start()
个await Task.Run()
电话。否则,线程似乎被阻塞并且没有接收到凝视数据。我还必须添加async await
到流事件处理程序。
为什么有必要这样做?