gpt4 book ai didi

c# - Metro - 编写异步 c# 操作并从 javascript 调用

转载 作者:行者123 更新时间:2023-11-29 10:49:07 25 4
gpt4 key购买 nike

我创建了一个 metro 应用程序,它由- 一个 C# Windows 运行时组件- 一个 javascript 应用程序,包含 UI 并且是主应用程序。

在 c# 组件中,我创建了一个 async 方法:

async public void createDocument() {
}

但是当我尝试从 javascript 代码调用它时,我无法使用 .done() 或 then() 函数来处理方法完成事件,因为出现错误:javascript 错误,无法调用 done()来自未设置为对象实例的对象。

如果我尝试将 Task 或 Task 分配给函数,我会遇到另一个错误,它告诉我 Task 不是 Windows 运行时类型,而是使用 IAsyncOperation、IAsyncAction、ecc..。

那么,我如何在 c# windows 运行时组件中创建异步函数并从处理 done() 或 then() 事件的 javascript 中调用它

最佳答案

我发现一篇文章似乎与您遇到的问题有关。我自己没有这样做,但它的要点是你不能使用 C# 中的 async 关键字来实现 Javascript promise - 你必须以稍微不同的方式包装该方法:

代替:

public sealed class Class1
{
public async void testAsync()
{
// do this asynchronously ...
}
}

尝试:

public sealed class Class1
{
public IAsyncActionWithProgress<Result> testAsync()
{
return AsyncInfo.Run<Result>((token, result) =>
Task.Run<Result>(()=>
{
// do this asynchronously ...
return new Result();
}

));
}
}

public sealed class Result { ... }
}

我复制并粘贴了 Ronald Widha 这篇文章中的示例 - http://www.ronaldwidha.net/2012/05/10/winrt-consumer-preview-calling-c-csharp-async-class-libraries-from-javascript-winjs-promises-using-then-clause/它是在消费者预览期间编写的,因此它可能在那时和最终版本之间发生了变化

希望这能对您有所帮助!

关于c# - Metro - 编写异步 c# 操作并从 javascript 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13712792/

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