Основным направлением проекта, который я сейчас выполняю, является создание функции автоматизации Excel (CEF
), которая позволяет пользователю получать соответствующие данные на основе предоставленных параметров в функции.CEF будет заполнять ячейку везде, где пользователь использует следующую формулу: " = CEF (id, [param1], [param2], ... "
public string CEF(string id, string param1 = "", string param2 = "", string param3 = "", string param4 = "")
{
return results;
}
За ним стоит сетьметод (getDataString()
), который предоставляется и вызывается CEF
, чтобы он мог получать результаты из базы данных через веб-сервис.
В исходной реализации я использовал синхронизированный подход для вызова Интернетаметод, который оказался довольно проблематичным. Excel заморозился, пока все результаты не были возвращены.
Поэтому я решил попробовать использовать Асинхронный подход здесь ( пример Iследовал ), но на самом деле это дает мне новую проблему - CEF
всегда возвращает ноль.
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
.