Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# edge.js在windows窗体下没有响应_C#_Async Await_Edgejs - Fatal编程技术网

C# edge.js在windows窗体下没有响应

C# edge.js在windows窗体下没有响应,c#,async-await,edgejs,C#,Async Await,Edgejs,以下给出了1-2秒后的结果: [STAThread] static void Main() { // Application.EnableVisualStyles(); // Application.SetCompatibleTextRenderingDefault(false); //

以下给出了1-2秒后的结果:

[STAThread]
        static  void Main()
        {
            //                        Application.EnableVisualStyles();
            //                        Application.SetCompatibleTextRenderingDefault(false);
            //                        Application.Run(new Form1());
            Task mainTask = MainAsync();
            mainTask.Wait();

        }
        static async Task MainAsync()
        {
            var func = Edge.Func(@"
            var esprima = require('esprima');
            var stringify = require('json-stable-stringify');

            var esprimaast = esprima.parse('var a=1;', { loc: true });
            var esprimaStr = stringify(esprimaast, { space: 3 });
            return function (data, callback) {
                callback(null, esprimaStr);
            }
           ");//end Edge.Func

            var result = await func(null);

            Console.WriteLine(result.ToString());
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            Object myresult = serializer.Deserialize<JSProgram>(result.ToString());

            Console.WriteLine(serializer.Serialize(myresult));



        }
并在点击按钮下触发它

 private void button1_Click(object sender, EventArgs e)
        {
            Task mainTask = MainAsync();
            mainTask.Wait();
        }

        async Task MainAsync()
        {
            var func = Edge.Func(@"
            var esprima = require('esprima');
            var stringify = require('json-stable-stringify');

            var esprimaast = esprima.parse('var a=1;', { loc: true });
            var esprimaStr = stringify(esprimaast, { space: 3 });
            return function (data, callback) {
                callback(null, esprimaStr);
            }
        ");//end of Edge.Func

            var result = await func(null);

            txtEsprima.Text = result.ToString();
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            Object myresult = serializer.Deserialize<JSProgram>(result.ToString());

           txtMe.Text=serializer.Serialize(myresult);



        }
private void按钮1\u单击(对象发送者,事件参数e)
{
Task mainTask=MainAsync();
mainTask.Wait();
}
异步任务mainsync()
{
var func=Edge.func(@)
var esprima=需要('esprima');
var stringify=require('json-stable-stringify');
var esprimaast=esprima.parse('var a=1;',{loc:true});
var-esprimaStr=stringify(esprimaast,{space:3});
返回函数(数据、回调){
回调(null,esprimaStr);
}
“”;//Edge.Func的结尾
var结果=等待函数(空);
txtEsprima.Text=result.ToString();
JavaScriptSerializer serializer=新的JavaScriptSerializer();
对象myresult=serializer.Deserialize(result.ToString());
Text=serializer.Serialize(myresult);
}

根本没有回复,问题出在哪里?

似乎您已经与常见的“混合异步与
.Result()
/
.Wait()
死锁”问题发生冲突。您的
.Wait()
会阻止WinForms UI线程,直到任务完成。但是,在Windows消息循环上下文中,任务继续的方式是向消息循环发布执行继续委托的请求。由于您使用阻塞
.Wait()
停止了消息循环,因此出现了死锁,它将永远留在那里

要修复此问题,请使
按钮1\u Click()
异步,并
等待主任务,而不是
等待()

在第一个示例中,原因是您还没有活动的消息循环,因此延续策略是不同的

 private void button1_Click(object sender, EventArgs e)
        {
            Task mainTask = MainAsync();
            mainTask.Wait();
        }

        async Task MainAsync()
        {
            var func = Edge.Func(@"
            var esprima = require('esprima');
            var stringify = require('json-stable-stringify');

            var esprimaast = esprima.parse('var a=1;', { loc: true });
            var esprimaStr = stringify(esprimaast, { space: 3 });
            return function (data, callback) {
                callback(null, esprimaStr);
            }
        ");//end of Edge.Func

            var result = await func(null);

            txtEsprima.Text = result.ToString();
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            Object myresult = serializer.Deserialize<JSProgram>(result.ToString());

           txtMe.Text=serializer.Serialize(myresult);



        }