【问题标题】:WCF (C#), calling an Async method. help!WCF (C#),调用异步方法。帮助!
【发布时间】:2010-09-22 09:41:30
【问题描述】:

我对此感到困惑,如果有任何帮助,我将不胜感激!

我正在使用 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]);
  }

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

我应该放弃异步方法并使用带有后台工作程序的同步方法吗? (也许更直接?)

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

【问题讨论】:

    标签: c# wcf asynchronous


    【解决方案1】:

    这就是异步方法的全部意义所在。您触发它们,代码会立即返回,以避免在服务响应之前阻塞 UI。您仅在成功回调 (AmazonItemSearchCompleted) 中使用结果。对于 WPF 应用程序,如果您使用异步方法,您应该知道成功回调可以在与主 GUI 线程不同的线程上调用,并且您不应该在其中更新控件。您需要使用Dispatcher object

    【讨论】:

    • 感谢您的澄清。看起来我错过了一些更基本的东西。回到书本。
    猜你喜欢
    • 2013-07-11
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    相关资源
    最近更新 更多