C# 如何在主线程中保持每个异步进程
我需要从我的wp7应用程序发出一些web请求, 比如从服务器上获取数据库的版本,并将其与本地数据库版本进行比较,然后在需要时更新数据库 我想在启动屏幕时用一些动画,用户需要等待,因为这些数据对应用程序至关重要。当所有的东西都被检查时,应用程序的主菜单将被午餐 我想将这些请求保留在主线程中。一个请求->获取响应->第二个请求->获取响应。。。我发现唯一的方法就是使用wait-task。我在问其他的方法 每种方法C# 如何在主线程中保持每个异步进程,c#,multithreading,asynchronous,httprequest,windows-phone-7.1,C#,Multithreading,Asynchronous,Httprequest,Windows Phone 7.1,我需要从我的wp7应用程序发出一些web请求, 比如从服务器上获取数据库的版本,并将其与本地数据库版本进行比较,然后在需要时更新数据库 我想在启动屏幕时用一些动画,用户需要等待,因为这些数据对应用程序至关重要。当所有的东西都被检查时,应用程序的主菜单将被午餐 我想将这些请求保留在主线程中。一个请求->获取响应->第二个请求->获取响应。。。我发现唯一的方法就是使用wait-task。我在问其他的方法 每种方法 HttpWebRequest 或 使用AsyncCallback,这样我就可以说我是
HttpWebRequest
或
使用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
{
}
}
你的每一个建议对我来说都是无价的,提前谢谢
[…]WebClient的每个方法都使用AsyncCallback
这是错误的。只需使用名称中包含Task的WebClient方法,即:
下载FileTaskAsync
下载StringTaskAsync
下载DataTaskAsync
然后,您可以等待这些任务中的每一项
如果您使用的其他类型确实没有返回任务的异步方法版本,则可以使用Task.fromsync从该异步方法生成任务
如果异步方法与FromAsync不兼容,或者是因为它触发事件、接受回调,或者只是因为您希望如何定义任务的语义存在一些细微的差异,那么您可以使用TaskCompletionSource在给定任何其他异步方法的情况下手动生成任务。只需创建TCS,并根据其他异步方法提供的任何机制设置结果/异常/取消。我正在询问其他方法/方法。为什么?您可以使用SynchronizationContext、TaskScheduler、AsyncOperationManager或Dispatcher,但这些都是低于标准的方法。async/await绝对比任何其他方法更简单、更干净、更安全、更易于维护
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
{
}
}