簡體   English   中英

WCF(C#),調用異步方法。 救命!

[英]WCF (C#), calling an Async method. help!

我為此感到難過,將不勝感激!

我正在使用WCF和Visual Studio生成的-asynch-方法調用Amazon api。

有一個WPF page ,上面有一個按鈕。 按下按鈕,它將在另一個類中調用搜索方法。 (請參見下面的代碼)

在另一個搜索器類中,我添加了方法AmazonItemSearchCompleted來處理ItemSearchCompleted事件。 然后,我從生成的wcf代碼中調用異步搜索功能。

Client.ItemSearchCompleted += AmazonItemSearchCompleted;

Client.ItemSearchAsync(itemSearch);

這一切似乎都很好。 但是AmazonItemSearchCompleted方法似乎僅在調用表單中的所有代碼結束后AmazonItemSearchCompleted命中。 但是,當我步進時(無論我等待服務響應多長時間),都將在searchAmazon ()之后的最后一個括號中出現。 但是到這個時候,使用請求的結果已經為時已晚!

private void button1_Click(object sender, RoutedEventArgs e)
{
    searchAmazon();
} // <----- AmazonItemSearchCompleted get's hit here

private void searchAmazon()
    {
        var AzSearch = new AmazonSearch();

        var ISBNS = new List<string>();
        ISBNS.Add("0439023513");
        //ISBNS.Add("9780071374323");

        AzSearch.GetBookNameFromISBN(ISBNS[0]);
  }

也許我在這里錯過了一些東西,但是我不知道為什么這個事件似乎遲到了?

我應該放棄異步方法,並與后台工作者一起使用同步方法嗎? (也許更簡單?)

感謝您提供的任何幫助或指示!

這就是異步方法的重點。 您觸發它們,代碼立即返回以避免在服務響應之前阻塞UI。 您只能在成功回調( AmazonItemSearchCompleted )中使用結果。 對於WPF應用程序,如果使用異步方法,則應注意,可以在與主GUI線程不同的線程上調用成功回調,並且不應在其中更新控件。 您需要使用Dispatcher對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM