我有这个样本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
添加到流事件处理程序。
为什么有必要这样做?