C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。
2014-03-08 21:38
483 查看
原文:C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。
一般我们在撰写Windows Phone APP 的时候,很常使用WebClient来帮我们完成抓取网路资料的动作,并且利用DownloadStringCompleted的事件去帮我们得知载入的事件已经完成了,可以让我们进行下一步的动作,但是若我们想要将WebClient的DownloadStringCompleted事件改成非同步的awiat方法该如何做呢?!可以自订一延伸WebClient的方法来达成。?
本篇文章将引导您将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。?
首先这是Windows Store App上开发时会使用的程式码,功能是从网路撷取网页原始资料:?
[/code]
.csharpcode, .csharpcode pre{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt{
background-color: #f4f4f4;
width: 100%;
margin: 0em;}
.csharpcode .lnum { color: #606060; }]]>?
然後成功之後很开心地移植到Windows Phone 8上使用,结果悲剧发的奇怪不能用.....?
後来改回用原本的WebClient的DownloadStringCompleted事件来达成,功能一样是从网路撷取网页原始资料,可是就跟原本的写法不一样:?
[/code]
.csharpcode, .csharpcode pre{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt{
background-color: #f4f4f4;
width: 100%;
margin: 0em;}
.csharpcode .lnum { color: #606060; }]]>?
这样会造成移植上的困扰还要改一堆其他程式码实在不方便,
所以索性用延伸WebClient方法的方式来改造一下程式码。?
步骤一:
开一个新的类别档(class),类别的型别是静态的,并命名为Extensions如下程式码所示:?
[/code]
.csharpcode, .csharpcode pre{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt{
background-color: #f4f4f4;
width: 100%;
margin: 0em;}
.csharpcode .lnum { color: #606060; }]]>?
上述程式码是将WebClient底下新增一个自定义的方法,那也是使用DownloadStringCompleted的方式来回传直。
而自订义的方法名称为DownloadStringTask。?
步骤二:
如此一来我们就可以在主程式中使用WebClient底下DownloadStringTask的方法罗!!?
[/code]
.csharpcode, .csharpcode pre{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt{
background-color: #f4f4f4;
width: 100%;
margin: 0em;}
.csharpcode .lnum { color: #606060; }]]>?
这样我们就将将WebClient的DownloadStringCompleted事件改成非同步的awiat方法罗!!??
Refrence : Async await in Windows Phone web access APIs?
文章中的叙述如有观念不正确错误的部分,欢迎告知指正 谢谢
转载请注明出处,并且附上本篇文章网址 !? 感谢。
SUKI
https://www.facebook.com/Holiestar
https://www.facebook.com/firestar.register
var now = new Date();var index=now.getTime();document.write('');
DotBlogs Tags:
C#
DownloadStringCompleted
DownloadStringTask
Visual Studio 2013
WebClient
Windows Phone 8
[笔记]C# Windows Phone 8 WP8 开发,找回StackPanel底下Orientation消失的属性。
[笔记] C# Windows Phone 8 WP8 开发,判断目前网路是否可用。
C# Windows 8、Phone 8 开发,取得控制项中的ItemTemplate内控制项事件的Binding Object。
一般我们在撰写Windows Phone APP 的时候,很常使用WebClient来帮我们完成抓取网路资料的动作,并且利用DownloadStringCompleted的事件去帮我们得知载入的事件已经完成了,可以让我们进行下一步的动作,但是若我们想要将WebClient的DownloadStringCompleted事件改成非同步的awiat方法该如何做呢?!可以自订一延伸WebClient的方法来达成。?
本篇文章将引导您将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。?
首先这是Windows Store App上开发时会使用的程式码,功能是从网路撷取网页原始资料:?
//网路动作
[code]
public async Task<string> Download_WebFrom(string url)
{
HttpClient http = new System.Net.Http.HttpClient();
HttpResponseMessage response = await http.GetAsync(url);
return await response.Content.ReadAsStringAsync();
}
[/code]
.csharpcode, .csharpcode pre{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt{
background-color: #f4f4f4;
width: 100%;
margin: 0em;}
.csharpcode .lnum { color: #606060; }]]>?
然後成功之後很开心地移植到Windows Phone 8上使用,结果悲剧发的奇怪不能用.....?
後来改回用原本的WebClient的DownloadStringCompleted事件来达成,功能一样是从网路撷取网页原始资料,可是就跟原本的写法不一样:?
private void DownloadFromWeb()
[code]{
?
WebClient wc = new WebClient();
wc.Encoding = Encoding.UTF8;
wc.DownloadStringAsync(new Uri(Albums_URL));
wc.DownloadStringCompleted += wc_DownloadStringCompleted;
}
?
void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
//Debug.WriteLine("wc_DownloadStringCompleted" + e.Result);
try
{
string data = e.Result;
}
catch(Exception ex)
{
//网路GG
MessageBox.Show(ex.Message);
}
}
[/code]
.csharpcode, .csharpcode pre{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt{
background-color: #f4f4f4;
width: 100%;
margin: 0em;}
.csharpcode .lnum { color: #606060; }]]>?
这样会造成移植上的困扰还要改一堆其他程式码实在不方便,
所以索性用延伸WebClient方法的方式来改造一下程式码。?
步骤一:
开一个新的类别档(class),类别的型别是静态的,并命名为Extensions如下程式码所示:?
public static class Extensions
[code]{
public static Task<string> DownloadStringTask(this WebClient webClient, Uri uri)
{
var tcs = new TaskCompletionSource<string>();
?
webClient.DownloadStringCompleted += (s, e) =>
{
if (e.Error != null)
{
tcs.SetException(e.Error);
}
else
{
tcs.SetResult(e.Result);
}
};
?
webClient.DownloadStringAsync(uri);
?
return tcs.Task;
}
}
[/code]
.csharpcode, .csharpcode pre{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt{
background-color: #f4f4f4;
width: 100%;
margin: 0em;}
.csharpcode .lnum { color: #606060; }]]>?
上述程式码是将WebClient底下新增一个自定义的方法,那也是使用DownloadStringCompleted的方式来回传直。
而自订义的方法名称为DownloadStringTask。?
步骤二:
如此一来我们就可以在主程式中使用WebClient底下DownloadStringTask的方法罗!!?
public async Task<string> Download_WebFrom(string url)
[code]{
WebClient client = new WebClient();
string data = await client.DownloadStringTask(new Uri(url));
return data;
?
}
[/code]
.csharpcode, .csharpcode pre{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt{
background-color: #f4f4f4;
width: 100%;
margin: 0em;}
.csharpcode .lnum { color: #606060; }]]>?
这样我们就将将WebClient的DownloadStringCompleted事件改成非同步的awiat方法罗!!??
Refrence : Async await in Windows Phone web access APIs?
文章中的叙述如有观念不正确错误的部分,欢迎告知指正 谢谢
转载请注明出处,并且附上本篇文章网址 !? 感谢。
SUKI
HOLIESTAR
https://www.facebook.com/Holiestarhttps://www.facebook.com/firestar.register
var now = new Date();var index=now.getTime();document.write('');
DotBlogs Tags:
C#
DownloadStringCompleted
DownloadStringTask
Visual Studio 2013
WebClient
Windows Phone 8
关连文章
C# Windows 8 & 8.1 开发,启用NavigationCacheMode,以防Navigate导览至其他页面时的资料遗失。[笔记]C# Windows Phone 8 WP8 开发,找回StackPanel底下Orientation消失的属性。
[笔记] C# Windows Phone 8 WP8 开发,判断目前网路是否可用。
C# Windows 8、Phone 8 开发,取得控制项中的ItemTemplate内控制项事件的Binding Object。
相关文章推荐
- [笔记] C# Windows Phone 8 WP8 开发,判断目前网路是否可用。
- C# 隐藏 Windows Phone 侦错模式中萤幕右上角的数据条(模拟器、实机可用),截图好方便。
- C# Windows Phone 8 WP8 高级开发,制作不循环 Pivot ,图片(Gallery)导览不求人! 内附图文教学!!
- C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! !
- C# Windows Phone 8 WP8,切换各国语系免重开机 加速开发 送审有效率!!
- C#编程的一些规范与常识1
- C#中bool与Boolean有什么区别
- c#的Assembly.Load.CreateInstance(反射)和.config的使用
- c# 实现遍历 DataTable 和DataSet (简单的方式)
- C#事件之 发布符合 .NET Framework 准则的事件
- C#中的委托
- [CSharp In Depth]迭代器
- C#控件属性方法简介表
- IDL与C#混合编程技术
- C#:委托与事件
- C#:委托与事件
- C# 事件 之订阅和取消订阅事件
- C#中的反射 Assembly.Load() Assembly.LoadFrom()
- C# winform combobox 扩展
- C# 怎么检测string字符串中有哪些数字?