WCF(C#),调用Async方法。救命!

时间:2010-09-22 09:41:30

标签: c# wcf asynchronous

我很难过,并且非常感谢任何帮助!

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

有一个WPF page,上面有一个按钮。按下按钮,它会在另一个类中调用搜索方法。 (见下面的代码)

在这个其他搜索器类中,我添加方法AmazonItemSearchCompleted来处理ItemSearchCompleted事件。然后我从生成的wcf代码中调用异步搜索函数。

Client.ItemSearchCompleted += AmazonItemSearchCompleted;

Client.ItemSearchAsync(itemSearch);

这一切似乎都很好。但是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]);
  }

也许我在这里遗漏了一些东西,但我不知道为什么这个事件似乎迟到了?

我是否应该放弃asynch方法并将同步方法与后台工作者一起使用? (也许更直接?)

感谢您提供的任何帮助或指示!

1 个答案:

答案 0 :(得分:2)

这是异步方法的重点。您触发它们并且代码立即返回以避免阻止UI,直到服务响应。您仅在成功回调(AmazonItemSearchCompleted)中使用结果。对于WPF应用程序,如果使用异步方法,则应注意可以在与主GUI线程不同且不应更新控件的线程上调用成功回调。您需要使用Dispatcher object