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

C# AsyncCallBack-是否必须是静态的/是否必须返回void?,c#,asynchronous,asyncsocket,asynccallback,C#,Asynchronous,Asyncsocket,Asynccallback,我的问题相当简单,但我怀疑答案不会是。在我的WP7应用程序中,我调用一个RESTWeb服务来获取一些数据,并将其反序列化为类对象 我的请求方法及其AsyncCallBack方法位于类(MVVM ViewModel)中,并从类(LoadData)的实例方法中调用 AsyncCallBack将从web服务检索到的json反序列化为对象。我需要将此对象添加到类的集合中,所有这些都发生在该集合中,如下所示: this.Collection1.Add(retrievedObject); 当然,因为As

我的问题相当简单,但我怀疑答案不会是。在我的WP7应用程序中,我调用一个RESTWeb服务来获取一些数据,并将其反序列化为类对象

我的请求方法及其AsyncCallBack方法位于类(MVVM ViewModel)中,并从类(LoadData)的实例方法中调用

AsyncCallBack将从web服务检索到的json反序列化为对象。我需要将此对象添加到类的集合中,所有这些都发生在该集合中,如下所示:

this.Collection1.Add(retrievedObject); 
当然,因为AsyncCallBack是静态的,所以我不能访问“this”关键字。我也不能将retrievedObject返回给调用者,因为AsyncCallBack必须返回void。我意识到我可能是一些基本误解的受害者。我如何解决这个问题

谢谢

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

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

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

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

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

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

为什么您的
AsyncCallback
必须是静态的;但我注意到它总是出现在例子中。我担心,使其非静态将使其不是线程安全的或类似的东西。正如我所说,我对这些方法不是非常熟悉。。。但如果这不是一个问题,那么请让我知道,因为这将回答我的问题!通过简单地将AsyncCallBack设置为实例方法并在AsyncCallBack中执行此操作.Collection1.Add(retrievedObject),我得到了一个“无效的跨线程访问”异常。您的回调可能会在非UI线程上调用,因此您可能需要同步对集合的访问(或使用线程安全的集合),但是回调不要求是静态方法。除了主线程(即创建控件的线程)之外,您不能从任何其他线程访问任何控件。您需要使用
Dispatcher
在主线程中运行该代码。看:谢谢你们!一旦你指出了主要的问题,我在@SteveWillcock的回答中找到了这个伟大的解决方案:为什么你的
AsyncCallback
必须是静态的?它不是;但我注意到它总是出现在例子中。我担心,使其非静态将使其不是线程安全的或类似的东西。正如我所说,我对这些方法不是非常熟悉。。。但如果这不是一个问题,那么请让我知道,因为这将回答我的问题!通过简单地将AsyncCallBack设置为实例方法并在AsyncCallBack中执行此操作.Collection1.Add(retrievedObject),我得到了一个“无效的跨线程访问”异常。您的回调可能会在非UI线程上调用,因此您可能需要同步对集合的访问(或使用线程安全的集合),但是回调不要求是静态方法。除了主线程(即创建控件的线程)之外,您不能从任何其他线程访问任何控件。您需要使用
Dispatcher
在主线程中运行该代码。看:谢谢你们!一旦你指出了主要的担忧,我在@SteveWillcock的回答中发现了这个伟大的解决方案:太棒了-谢谢!这里有一个(在我看来)处理线程的好方法:SteveWillcock在这个线程上的回答:太棒了-谢谢!这里有一个(在我看来)处理线程的好方法:Steve Willcock关于这个线程的回答: