[英]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.