gpt4 book ai didi

c# - 如何使用 Edge.js 模块创建和重用实例变量?

转载 作者:搜寻专家 更新时间:2023-10-31 23:53:03 25 4
gpt4 key购买 nike

我的问题是什么?

当我说“闪烁绿色”时,无人机将完全按照我的要求进行操作。效果很好。

当我再次说“Blink green”时,它会执行代码,但无人机没有给出响应。无人机只在第一时间给出了回应。所以每次我都必须重新启动程序才能使其工作。烦人的...

第二次会发生什么?

它会做同样的事情,它也在执行代码,但无人机没有给出响应。

代码如下:

private static void _speechRecognitionEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
switch (e.Result.Text)
{
case "Blink green":
Task.Run((Action)blinkGreen);
break;
}
}

// ONLY WORKS THE FIRST TIME
// WHEN I SAY "BLINK GREEN" AGAIN, IT'S WILL EXECUTE THE
// CODE BUT THE DRONE DOESN'T GIVE A RESPONSE. ONLY THE
// FIRST TIME (SO I HAVE TO RESTART THE PROGRAM)
public static async void blinkGreen()
{
var func = Edge.Func(@"
var arDrone = require('ar-drone');
var client = arDrone.createClient();

return function(data, callback){
client.animateLeds('blinkGreen',5,2);
callback(null, data);
}
");
Console.WriteLine(await func("BLINK EXECUTED!"));
}

我认为发生了一些事情:

var arDrone = require('ar-drone');
var client = arDrone.createClient();

我想我可以创建一个客户端。我必须创建并重用客户端实例,这样我就可以使用可以解决问题的同一个客户端。但是我不知道如何使用 Edge.js 模块来做到这一点...

我希望有人能帮我解决这个问题。

谢谢,

杰米

最佳答案

@杰伊>

我走得更远了,让我们看看我做了什么。

  1. 我创建了一个 bool 值来检查是否已经有一个客户端和一个变量来保存客户端。

    static bool clientCreated = false;
    static object currentClient;
  2. 在项目开始时,我创建了一张支票以获取现有或新客户

        // First check to get an existing or new client
    currentClient = GetOrCreateClient();
  3. 我创建了一个返回现有或新客户的方法

    public static object GetOrCreateClient()
    {
    // If there is already a client
    if (clientCreated)
    {
    Console.WriteLine("There's already a client!");
    }
    // If there is no client
    else
    {
    // Set boolean
    clientCreated = true;

    // Create a client
    var newClient = Edge.Func(@"
    var arDrone = require('ar-drone');
    var client = arDrone.createClient();

    return function(data, callback){
    callback(null, data);
    }
    ");

    Console.WriteLine("Client created!");

    // Return new client
    return newClient;
    }
    // Return current client
    return currentClient;
    }
  4. 以及执行 Action (无人机动画)的功能方法应该使用相同的客户端

    public static async void blinkGreen()
    {
    // Get an existing or new client
    var client = GetOrCreateClient();

    // Execute the functionality
    var func = Edge.Func(@"
    var arDrone = require('ar-drone'); // ACTUALLY THIS ONE IS ALREADY DEFINED IN THE METHOD GetOrCreateClient()
    var client = I WANT HERE THE CLIENT, BUT HOW?

    return function(data, callback){
    client.animateLeds('blinkGreen',5,2);
    callback(null, data);
    }
    ");
    Console.WriteLine(await func("BLINK EXECUTED!"));
    }

现在我被一些事情困住了,因为这是将客户端全局保存在一个对象中的正确方法吗?因为 GetOrCreateClient() 方法返回以下对象:

`System.Func`2[System.Object,System.Threading.Tasks.Task`1[System.Object]]`

所以我的下一个问题是,如何在功能中使用客户端对象?

var client = GetOrCreateClient();

变量应放入:

        var func = Edge.Func(@"             
var arDrone = require('ar-drone'); // ACTUALLY THIS ONE IS ALREADY DEFINED IN THE METHOD GetOrCreateClient()
var client = I WANT HERE THE CLIENT, BUT HOW?

断开客户端连接的另一种方法也可以解决问题,但确实会增加开销和延迟。

关于c# - 如何使用 Edge.js 模块创建和重用实例变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35373241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com