Chromely中如何在JavaScript中调用C#方法时获取返回值?

极客怡萱 阅读 28

我在用Chromely开发桌面应用时遇到了问题,通过JavaScript调用C#方法总得不到返回值。比如这样写的代码:


chromely.invoke('GetData').then(data => {
  console.log(data); // 这里始终是undefined
});

我在C#那边确认过方法确实返回了数据,但前端始终拿不到结果。试过同步调用直接赋值给变量,但界面会卡死。有没有人遇到过这种情况?应该怎样正确获取异步调用的返回值?

我来解答 赞 11 收藏
二维码
手机扫码查看
2 条解答
东方书錦
这个问题我也踩过坑。在 Chromely 中,C# 方法返回值不能直接通过 chromely.invoke 获取,原因在于它本质上是异步通信机制,而 C# 方法的返回值如果没有被显式封装成 Promise 或通过异步回调处理,前端 JS 是拿不到直接返回值的。

解决方法其实不复杂,关键在于两点:

1. **C# 方法必须返回 Task 类型**,不能是 void 或普通 object,否则 JS 拿不到异步结果
2. **JS 调用时使用 await.then()**,并且 C# 方法内部要确保正确返回数据

举个例子:

C# 代码:
public class MyController : ControllerBase
{
public async Task<object> GetData()
{
return await Task.FromResult("Hello from C#");
}
}


JS 调用代码:
chromely.invoke('GetData').then(data => {
console.log(data); // 正确输出 "Hello from C#"
});


我之前也试过同步方式,结果界面直接卡死 😫,后来才明白 Chromely 的机制就是走异步通信,别走弯路了。

确保你 C# 方法是异步的、返回了正确的数据结构,并且前端用了 .then()await 去等结果,这样就能拿到返回值了。
点赞 6
2026-02-04 09:02
司空祖溢
这个问题挺常见的,Chromely的JS-C#交互确实有点坑。你现在的写法问题出在C#那边没正确配置返回值。

确保你的C#方法是这样写的:

[CefGlue.JsCallback]
public string GetData()
{
return "这是返回的数据";
}


然后JS这边保持不变:

chromely.invoke('GetData').then(data => {
console.log(data); // 现在应该能正确打印了
});


关键是C#的方法必须加 [CefGlue.JsCallback] 这个特性,而且返回类型要匹配。如果还是不行,检查下Chromely的版本,老版本可能有点bug。

代码放这了,试试看吧。
点赞 13
2026-01-30 23:04