我现在有以下代码,它调用WCF服务,获取一些数据,然后将数据传递给浏览器。
唯一的问题是在Load()完成之前不会调用client_GetProductCompleted(),到那时为时已晚。浏览器已经加载了信息。
所以基本上我要问,如果有一种实现方法的方法,这样一旦调用Load()就调用client_GetProductCompleted(),然后它可以及时将数据返回给浏览器:)< / p>
这可能很愚蠢,但是我试图让程序在等待Load()完成时睡觉,但它没有用。所以我现在完全无能为力......
public static Products _OurProducts = new Products();
public void Load()
{
ServiceReference1.ServiceClient client = new ServiceReference1.ServiceClient();
client.getProductsCompleted +=
new EventHandler<ServiceReference1.getProductsCompletedEventArgs>(
client_GetProductCompleted);
client.getProductsAsync();
return;
}
void client_GetProductCompleted(object sender, ServiceReference1.getProductsCompletedEventArgs e)
{
if (e.Result != null)
{
ObservableCollection<ServiceReference1.Product> products = e.Result;
foreach (ServiceReference1.Product prod in products)
{
Product temp = new Product(prod);
_OurProducts.Add(temp);
}
}
}
答案 0 :(得分:4)
目前还不完全清楚,但我怀疑你希望MethodA
阻止,直到处理程序完成执行(大概是在另一个线程上)。
您查询的对象可能会提供返回结果的同步方式。如果可以的话,这肯定是可行的方式。
如果没有,您可以使方法阻止,直到发出信号为止,例如使用ManualResetEvent
。
E.g:
var resetEvent = new ManualResetEvent(false);
client.getProductsCompleted += (s, e) =>
{
client_GetProductCompleted(s, e);
resetEvent.Set();
};
client.getProductsAsync();
resetEvent.WaitOne();