【发布时间】:2011-08-26 10:25:07
【问题描述】:
我现在正在做的项目的主要重点是创建一个 Excel 自动化函数 (CEF),它允许用户根据函数中提供的参数获取相关数据。 CEF 将在用户使用以下公式时填充单元格,“=CEF(id, [param1],[param2], ..."
public string CEF(string id, string param1 = "", string param2 = "", string param3 = "", string param4 = "")
{
return results;
}
它的后面是一个 Web 方法 (getDataString()),它被 CEF 公开和调用,以便它可以通过 Web 服务从数据库中检索结果。
在最初的实现中,我使用了同步的方式来调用web方法,结果发现问题很大。 Excel 冻结,直到返回所有结果。
所以我决定在这里尝试使用 异步 方法 (the example I followed),但它实际上给了我一个新问题——CEF 总是返回 null。
void getDataStringCompleted(object sender, getDataStringCompletedEventArgs args)
{
results = args.Result;
}
我猜我总是得到空值的原因可能是因为CEF 总是首先被击中,因此返回一个空字符串。目前我有点卡住了,不知道从这里去哪里。任何人都可以帮助或给我一些指示吗?非常感谢。
编辑:
在调试代码时,我发现挂钩事件的代码可能无法正常工作。
public string CEF(string id, string param1 = "", string param2 = "", string param3 = "", string param4 = "")
{
MyWebservice service = new MyWebservice();
//Hookup async event handler
service.getDataStringCompleted += new
getDataStringCompletedEventArgs(this.getDataStringCompleted); // <=problem
service.getDataStringAsync(id,param1, param2, param3, param4); // <=problem
return results;
}
不知道有没有什么方法可以先调用getDataStringCompleted,给变量results赋值,然后在方法CEF中返回。
【问题讨论】:
-
如果您唯一更改的是使用异步函数而不是同步函数调用它,那么结果应该不会改变。你能把代码贴在你调用它的地方吗?
-
@Tridus 你能再看一下帖子(编辑部分)吗?谢谢。
标签: c# .net web-services excel asynchronous