2010-10-29 80 views
0

我知道如何在日常的.NET中做到这一点,但是随着WP7开发和Silverlight的发展,让我发疯。一个HttpWebRequest响应必须做异步,冷静,但我怎么能从异步方法调用UI线程?在Silverlight中从BeginGetResponse调用UI线程

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create('http://stackoverflow.com'); 
request.BeginGetResponse(new AsyncCallback(onRequestComplete), request); 

我在一个类,它有一个委托成立调用此。我想从onRequestComplete在UI线程上调用委托。我知道我可以这样做,从委托人那里调用,但我觉得这会更清洁。

在此先感谢

回答

1

您需要访问到相关Dispatcher,然后调用Dispatcher.BeginInvoke

任何UI元素都将通过Dispatcher属性访问系统调度程序。如果您需要以可测试的方式执行此操作,您可能需要将调度程序抽象为带有实现的IDispatcher接口,以便使用正常的接口进行生产,并在测试中使用类似SameThreadDispatcher的接口。

+0

谢谢。所以下一个问题 - InvokeRequired去哪了?谷歌说要使用CheckAccess,但我看不到。 – Sam 2010-10-29 08:32:49

+0

@Sam:CheckAccess *应该在那里。它被记录。根据我的经验,您一般都知道您是否需要通过调度员来调用 - 而且如果您不确定,那么无论如何这样做几乎总是安全的。 – 2010-10-29 08:40:49

+0

谢谢。是的,出于某种原因,它不会出现在VS2010中的IntelliSense中,但是,是的,我在最后一次评论之后尝试了它,并且它工作正常。谢谢。 – Sam 2010-10-29 08:53:52