【发布时间】:2012-11-15 21:44:25
【问题描述】:
一旦对 Web 服务的异步调用成功返回,我需要在我的 GUI 中刷新 ListBox。这并不像将 Web 服务调用的结果转储到 ObservableCollection 那样简单,因为结果实际上被放入索引的 Dictionary 中,并且在任何给定时间只有前 1000 个结果显示在 ListBox 中.
我有代码可以挑选出前 1000 个结果,并刷新 ListBox 显示,我只需要想办法在结果成功返回后调用它。
this.client.GetAsync<RepositoryResponse>(string.Format
("/repository?Dto={0}", reader.Dto.ToJson()),
r => ReadSuccessCallback(r),
(r, x) => ReadErrorCallback(r, x));
此代码在与进行 GUI 更新的窗口不同的对话框中执行。我在关闭一个对话框时将此称为异步获取,并希望在原始窗口中刷新ListBox。我尝试在ReadSuccessCallback 方法中传递一个要执行的Action 对象,它正确执行,但是给我一个错误,说ListBox 后面的Items 集合属于不同的线程,并且不能改变了。
只有在GetAsync 成功返回后,如何才能获得包含 1000 个项目的新块(并刷新ListBox 的显示)?有什么方法可以确保ReadSuccessCallback 与我的 GUI 在同一个线程中运行?
【问题讨论】:
标签: c# wpf delegates callback servicestack