我需要从我的wp7应用程序发出一些网页请求, 比如从服务器获取db版本并将其与本地db版本进行比较,然后在需要时更新db以及更多内容。
我想在启动屏幕时使用某种动画,用户需要等待它,因为这些数据对应用程序至关重要。当所有内容都被检查时,应用程序的主要菜单将被启用。
我想在主线程中保留此请求。一个请求 - >得到回应 - >第二个请求 - >得到回应......我发现只有一种方法可以使用等待 - 任务。我在问其他方法/方法。
的每一种方法
HttpWebRequest
或
WebClient
使用AsyncCallback
所以我可以说我不得不这样做。
如何让我进程等待AsyncCallback的结果,然后继续使用下一个方法?
另外我想向用户提供反馈,如果他需要检查与互联网的连接,如果他的应用程序现在正在更新.....并且从异步方法这是不可能的,因为据了解我们无法处理来自后台踏板的UI
这里是我提出db版本的代码的一部分:
public WelcomePage()
{
InitializeComponent();
CheckingVersionOFDB();
}
private void CheckingVersionOFDB()
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("here my site");
request.BeginGetResponse(asynchronous_method, request);
}
private void asynchronous_method(IAsyncResult ar)
{
HttpWebRequest request = (HttpWebRequest)ar.AsyncState;
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(ar);
DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(List<versionContent>));
Stream responseStream = response.GetResponseStream();
List< versionContent> serverVer = (List<versionContent>)deserializer.ReadObject(responseStream);
if (version > Convert.ToInt32((serverVer.ElementAt(0)).dbversion))
{
}
else
{
}
}
你提出的每一条建议对我来说都是无价的
答案 0 :(得分:2)
[{1]}的每种方法都使用
WebClient
这是错误的。只需使用名称中AsyncCallback
的{{1}}方法,即:
然后你可以WebClient
完成这些任务。
如果您正在使用其他类型的实际上没有返回Task
的异步方法版本,您可以使用await
从该异步生成任务方法。
如果异步方法与Task
不兼容,要么因为它触发事件,进行回调,要么只是在你希望如何定义任务的语义方面略有不同,你可以使用一个Task.FromAsync
手动生成FromAsync
给定任何其他异步方法。只需创建TCS并根据其他异步方法提供的任何机制设置结果/异常/取消。