AsyncCallBack - 它必须是静态的/是否必须返回void?

时间:2012-09-01 14:34:04

标签: c# asynchronous asyncsocket asynccallback

我的问题很简单,但我怀疑答案不会。在我的WP7应用程序中,我正在调用REST Web服务来获取一些数据,我将这些数据反序列化为类对象。

我的请求方法及其AsyncCallBack方法存在于类(MVVM ViewModel)中,并从类(LoadData)上的实例方法内部调用。

AsyncCallBack将从Web服务检索到的json反序列化为对象。我需要将这个对象添加到类的集合中,所有这些都发生了 - 就像这样:

this.Collection1.Add(retrievedObject); 

当然,由于AsyncCallBack是静态的,我无法访问“this”关键字。我也无法将retrieveObject返回给调用者,因为AsyncCallBack必须返回void。我意识到我可能是这里一些基本误解的受害者。我该如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:3)

它必须是静态的吗?否。

回调不一定是静态的,但你关心线程安全是正确的。回调方法将在不同的线程上调用,因此如果它使用主线程也在使用的某些数据,则必须同步对该数据的访问。

是否必须返回无效?是。

回调方法无法向启动异步任务的方法返回任何内容,因为该方法在任务完成之前返回。对于设置该返回值的回调方法,它必须及时返回。

答案 1 :(得分:1)

阅读如何使用异步编程模式(APM):msdn.microsoft.com/en-us/library/ms228963.aspx