Есть ли способ реализации следующего метода, который вызывается во времени? - PullRequest
0 голосов
/ 06 апреля 2011

Теперь у меня есть следующий код, который вызывает службу WCF, она получает некоторые данные и затем передает данные в браузер.

Единственная проблема заключается в том, что client_GetProductCompleted () не вызывается до загрузки() заканчивается, и к тому времени уже слишком поздно.Браузер уже загрузил информацию.

Так что в основном я спрашиваю, есть ли способ реализации методов, такой, что 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);
        }
     }
}

1 Ответ

4 голосов
/ 06 апреля 2011

Это не совсем понятно, но я подозреваю , что вы хотите MethodA заблокировать, пока не закончится выполнение обработчика (предположительно в другом потоке).

Возможно, объектЗапрашиваемая предлагает синхронный способ возврата своих результатов.Это определенно будет подходящим способом, если он доступен.

Если нет, вы можете сделать блок метода до тех пор, пока он не получит сигнал, например, с помощью ManualResetEvent

Например:

var resetEvent = new ManualResetEvent(false);
client.getProductsCompleted += (s, e) => 
                               { 
                                   client_GetProductCompleted(s, e); 
                                   resetEvent.Set();
                               };    
client.getProductsAsync(); 
resetEvent.WaitOne();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...