有没有一种方法可以实现下面的方法,使它能及时被调用
本文关键字:方法 调用 一种 实现 有没有 | 更新日期: 2023-09-27 17:49:17
我现在有了下面的代码,它调用了一个WCF服务,它获取一些数据,然后将数据传递给浏览器。
唯一的问题是client_GetProductCompleted()直到Load()完成才被调用,到那时已经太晚了。浏览器已经加载了信息。
所以基本上我在问,如果有一种实现方法的方法,这样的client_GetProductCompleted()被调用一旦Load()被调用,那么它可以及时返回数据回浏览器:)
这可能是愚蠢的,但我已经尝试让程序在等待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);
}
}
}
这不是完全清楚,但我怀疑您希望MethodA
阻塞直到处理程序完成执行(可能在另一个线程上)。
您正在查询的对象可能提供同步返回其结果的方式。如果可以的话,这绝对是一种可行的方法。
如果没有,你可以让方法阻塞,直到它被发出信号,比如用 ManualResetEvent
。
例如:
var resetEvent = new ManualResetEvent(false);
client.getProductsCompleted += (s, e) =>
{
client_GetProductCompleted(s, e);
resetEvent.Set();
};
client.getProductsAsync();
resetEvent.WaitOne();