Blazor 将 javascript 代码连接到 c# 时出现问题 - 堆当前已锁定

问题描述 投票:0回答:1

我对 blazor/网络技术很陌生,也不是一个合适的 C# 程序员。我在将 javascript 代码连接到 c# 方法时遇到问题。我阅读了文档等并尝试了几种不同的方法但无法使其工作。我收到这个错误

Loaded 8.52 MB resources from cache
Debugging hotkey: Shift+Alt+D (when application has focus)
Uncaught Error Error: Assertion failed - heap is currently locked
    at Tt (localhost꞉44317/_framework/blazor.webassembly.js:1:47036)
    at invokeDotNetFromJS (localhost꞉44317/_framework/blazor.webassembly.js:1:45338)
    at invokeDotNetMethod (localhost꞉44317/_framework/blazor.webassembly.js:1:3485)
    at invokeDotNetStaticMethod (localhost꞉44317/_framework/blazor.webassembly.js:1:3241)
    at e.invokeMethod (localhost꞉44317/_framework/blazor.webassembly.js:1:1980)
    at createPostcodeFromCoordinates (<eval>/VM46947987:254:29)
    at <anonymous> (<eval>/VM46947987:6:29)

javascript side
 function createPostcodeFromCoordinates(longitude, latitude) {

    var result = DotNet.invokeMethod('cLib', 'createPostcodeFromCoordinates', longitude, latitude);
//     var postcode = this.dotNetReference.invokeMethod("createPostcodeFromCoordinates");
    // DotNet.invokeMethod('cSharpLibraries', 'createPostcodeFromCoordinates', longitude, latitude)
    //     .then(result => {
    //         console.log(result);
    //     });

C#
public static string CreatePostcodeFromCoordinates(string longitude, string latitude)
{

// Many lines of logic...

  return result;
}

我有什么办法可以解决这个问题吗?上面的错误消息为 Uncaught Error 错误:断言失败 - 堆当前已锁定 可能是我能做到的最好的。我收到了一些其他更奇怪的消息,但我认为这个更好! 我不需要任何异步的东西,但很高兴拥有它。尝试让通话尽可能简单。另外,调试器在 Visual Studio 中无法工作,这可能有助于了解出了什么问题。

非常感谢!

javascript c# blazor-webassembly
1个回答
0
投票

消息“堆当前已锁定”表示代码可能正在尝试访问已在使用的资源。

使用 async 可能有助于解决这个问题,因此您应该使用 invokeMethodAsync 而不是 invokeMethod。

尝试更改线路:

var result = DotNet.invokeMethod('cLib', 'createPostcodeFromCoordinates', longitude, latitude);

var result = await DotNet.invokeMethodAsync('cLib', 'createPostcodeFromCoordinates', longitude, latitude);
© www.soinside.com 2019 - 2024. All rights reserved.