ASP.NET Core中JS Runtime调用无超时弹窗遇序列化错误求助
问题解决方案
1. 修复序列化错误问题
你不能将CancellationToken作为JS函数参数传递给InvokeAsync,因为CancellationToken内部包含IntPtr类型的成员(如WaitHandle.Handle),JSInterop无法序列化这类非托管类型。
正确的用法是使用InvokeAsync的重载,将取消令牌作为方法的最后一个参数传入(而非JS函数的参数):
await _jsRuntime.InvokeAsync<Task>("showVersionUpdate", version, System.Threading.CancellationToken.None);
修改为:
await _jsRuntime.InvokeAsync<Task>("showVersionUpdate", System.Threading.CancellationToken.None, version);
如果不需要取消逻辑,直接省略令牌参数即可:
await _jsRuntime.InvokeAsync<Task>("showVersionUpdate", version);
2. 禁用SweetAlert2弹窗超时
弹窗自动关闭是因为SweetAlert2默认启用了超时机制,需要在JS端的showVersionUpdate函数中显式禁用超时配置:
function showVersionUpdate(version) { Swal.fire({ title: "版本更新通知", text: `当前版本:${version}`, timer: null, // 禁用自动超时关闭 showConfirmButton: true // 其他自定义配置 }); }
部分SweetAlert2版本也支持将timer设为0来禁用超时,可根据实际版本调整。
内容的提问来源于stack exchange,提问作者user15314303
相关产品推荐
相关产品推荐

