有没有一种方法可以实现下面的方法,使它能及时被调用

本文关键字:方法 调用 一种 实现 有没有 | 更新日期: 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();