我对 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 中无法工作,这可能有助于了解出了什么问题。
非常感谢!
消息“堆当前已锁定”表示代码可能正在尝试访问已在使用的资源。
使用 async 可能有助于解决这个问题,因此您应该使用 invokeMethodAsync 而不是 invokeMethod。
尝试更改线路:
var result = DotNet.invokeMethod('cLib', 'createPostcodeFromCoordinates', longitude, latitude);
到
var result = await DotNet.invokeMethodAsync('cLib', 'createPostcodeFromCoordinates', longitude, latitude);