有没有办法实现以下方法,以便及时调用?

时间:2011-04-06 15:09:42

标签: c# wcf

我现在有以下代码,它调用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);
        }
     }
}

1 个答案:

答案 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();