亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#下載歌詞文件的同步和異步方法

2020-01-24 01:05:46
字體:
來源:轉載
供稿:網友

前段時間寫了一篇C#解析Lrc歌詞文件,對lrc文件進行解析,支持多個時間段合并。本文借下載歌詞文件來探討一下同步和異步方法。
 Lrc文件在網絡上隨處可見,我們可以通過一些方法獲取,最簡單的就是別人的接口,如: http://geci.me/api/lyric/不得不愛 返回下面的json,這樣我們就很容易得到歌詞文件了。 

{ "count": 2, "code": 0, "result": [  {   "aid": 2727794,   "lrc": "http://s.geci.me/lrc/327/32793/3279317.lrc",   "song": "不得不愛",   "artist_id": 2,   "sid": 3279317  },  {   "aid": 3048347,   "lrc": "http://s.geci.me/lrc/371/37129/3712941.lrc",   "song": "不得不愛",   "artist_id": 2,   "sid": 3712941  } ]}

C#解析Lrc歌詞文件中我們創建了Lrc類,我們繼續在該類中添加方法。

同步下載實現 
創建SearchLrc靜態方法,該方法實現對歌詞的搜索:首先查看本地文件夾(我的文件夾是D:/lrc/)是否存在lrc文件,如果不存在就下載lrc文件,返回Lrc對象。 

  public static Lrc SearchLrc(string musicName)  {   string path = @"D:/lrc/" + musicName + ".lrc";   if (System.IO.File.Exists(path))   {    return InitLrc(path);   }   else   {    return DownloadLrc(musicName, path);   }  }

下載歌詞利用WebClient,首先用DownloadString方法將獲取json,再利用JavaScriptSerializer反序列化為自定義對象,這樣就得到了lrc文件的url,最后通過url將lrc文件下載到本地,再調用InitLrc方法返回Lrc對象。 

 public class TempJosnMain {  public int count { get; set; }  public int code { get; set; }  public List<TempJsonChild> result { get; set; } } public class TempJsonChild {  public int aid { get; set; }  public string lrc { get; set; }  public string song { get; set; }  public int artist_id { get; set; }  public int sid { get; set; } }  static Lrc DownloadLrc(string musicName, string path)  {   if (musicName.Contains("-"))    musicName = musicName.Split('-')[1].Trim();   string url = "http://geci.me/api/lyric/" + musicName;   WebClient wc = new WebClient();   string json = wc.DownloadString(url);   JavaScriptSerializer js = new JavaScriptSerializer();   TempJosnMain res = js.Deserialize<TempJosnMain>(json);   if (res.count > 0)   {    wc.DownloadFile(new Uri(res.result[0].lrc), path);    wc.Dispose();    return InitLrc(path);   }   return new Lrc();  }

異步下載實現 
創建SearchLrcAsyc靜態方法,該方法沒有返回值,所以我們用回調方法作為參數(該回調方法用Lrc作為參數并且沒有返回值),異步下載主要體現在json數據和文件的下載 

public static void SearchLrcAsyc(string musicName, Action<Lrc> action){  string path = @"D:/lrc/" + musicName + ".lrc";  if (System.IO.File.Exists(path))  {   action(InitLrc(path));  }  else  {   DownloadLrcAsyc(musicName, path, action);  }}

WebClient的DownloadStringAsync實現異步下載字符串,不會阻止調用線程。
 DownloadStringCompleted事件在下載字符串完成后觸發。我們可以使用
 DownloadStringAsync方法的構造來傳遞參數,從而達到在DownloadStringCompleted內部調用我們的Action<Lrc>函數。而我們的參數有兩個,所以需要封裝成一個對象。 

public void DownloadStringAsync( Uri address, object userToken)

address
包含要下載的 URI 的 Uri。
userToken
一個用戶定義對象,此對象將被傳遞給完成異步操作時所調用的方法。在DownloadStringCompleted方法中通過e.UserState來獲取

 public class CallbackObject {  public string path { get; set; }  public Action<Lrc> action { get; set; } }static void DownloadLrcAsyc(string musicName, string path, Action<Lrc> action)  {   if (musicName.Contains("-"))    musicName = musicName.Split('-')[1].Trim();   string url = "http://geci.me/api/lyric/" + musicName;   WebClient wc = new WebClient();   CallbackObject co = new CallbackObject()   {    action = action,    path = path   };   wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);   wc.DownloadStringAsync(new Uri(url), co);  }  static void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)  {   JavaScriptSerializer js = new JavaScriptSerializer();   TempJosnMain res = js.Deserialize<TempJosnMain>(e.Result);   if (res.count > 0)   {    WebClient wc = sender as WebClient;    if (wc == null)     wc = new WebClient();    CallbackObject co = e.UserState as CallbackObject;    wc.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wc_DownloadFileCompleted);    wc.DownloadFileAsync(new Uri(res.result[0].lrc), co.path, co);   }  }  static void wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)  {   CallbackObject co = e.UserState as CallbackObject;   co.action(InitLrc(co.path));  }

最后演示:

點擊下載時會有線程等待感覺像程序”卡死”,而異步下載則非常流暢。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性视频1819p久久| 欧美福利在线观看| 高跟丝袜一区二区三区| 久久久久久综合网天天| 欧美猛男性生活免费| 久久天天躁狠狠躁老女人| 国产精品久久久久久超碰| 日韩天堂在线视频| 成人在线免费观看视视频| 夜夜嗨av色一区二区不卡| 国产精品久久久久久亚洲影视| 日韩欧美aⅴ综合网站发布| 51视频国产精品一区二区| 欧美日韩综合视频| 国产成+人+综合+亚洲欧美丁香花| 欧美成人午夜激情视频| 色偷偷888欧美精品久久久| 国产成+人+综合+亚洲欧洲| 欧美xxxx14xxxxx性爽| 国产999精品久久久| 亚洲精品久久在线| 91九色国产在线| 色哟哟亚洲精品一区二区| 1769国产精品| 国产精品av免费在线观看| 亚洲精品国精品久久99热| 亚洲色图激情小说| 日韩在线观看视频免费| 亚洲精品xxx| 一本一本久久a久久精品综合小说| 欧美午夜电影在线| 久久久久久av| 日本免费久久高清视频| 色偷偷偷亚洲综合网另类| 欧美午夜视频在线观看| 最近2019年日本中文免费字幕| 97色在线播放视频| 国产高清在线不卡| 97精品国产aⅴ7777| 欧美肥老太性生活视频| 亚洲国产精品人人爽夜夜爽| 91欧美精品午夜性色福利在线| 日韩最新免费不卡| 久久精品一本久久99精品| 日韩美女免费线视频| 92看片淫黄大片欧美看国产片| 国产成人在线精品| 欧美亚洲伦理www| 日韩欧美成人精品| 97在线观看视频国产| 国产www精品| 久久久精品久久| 91在线国产电影| 日韩av网址在线观看| 日韩精品极品在线观看| 欧美激情a∨在线视频播放| 欧美性猛交xxxx富婆弯腰| 亚洲人成网站在线播| 中文字幕九色91在线| 日本一区二三区好的精华液| 国产97在线|日韩| 久久亚洲精品小早川怜子66| 亚洲国产精品嫩草影院久久| 亚洲色图狂野欧美| 欧洲亚洲妇女av| 91精品91久久久久久| 久久中文字幕国产| 在线看欧美日韩| 最近2019免费中文字幕视频三| 欧美精品videos另类日本| 在线播放精品一区二区三区| 日韩动漫免费观看电视剧高清| 久久免费少妇高潮久久精品99| 欧美黑人又粗大| 欧美激情在线一区| 97超碰国产精品女人人人爽| 日韩免费视频在线观看| 91精品国产综合久久久久久久久| 亚洲精品美女久久久久| 亚洲男人天堂手机在线| 亚洲欧洲日韩国产| 亚洲精品不卡在线| 欧美孕妇毛茸茸xxxx| 久久影院资源网| 欧美中文在线免费| 成人在线一区二区| 国产日韩欧美另类| 97超碰国产精品女人人人爽| 亚洲a∨日韩av高清在线观看| 57pao国产成人免费| 2019中文在线观看| 国产欧美中文字幕| 亚洲国产成人精品电影| 91po在线观看91精品国产性色| 九九热这里只有在线精品视| 热re99久久精品国产66热| 欧美成人亚洲成人| 欧美一级高清免费| 欧美亚洲另类激情另类| 日本精品一区二区三区在线播放视频| 久久免费视频观看| 国产这里只有精品| 亚洲香蕉成视频在线观看| 91精品国产91久久久久久不卡| 伊人伊成久久人综合网小说| 欧美日韩电影在线观看| 国产不卡av在线| 久久69精品久久久久久国产越南| 国产精品久久国产精品99gif| 久久精品国产综合| 91日本在线视频| 精品久久中文字幕久久av| 91视频免费在线| 国产一区红桃视频| 亚洲福利视频久久| 亚洲精品一区中文字幕乱码| 国产日韩在线视频| 裸体女人亚洲精品一区| 久久综合久久美利坚合众国| 国产精品视频xxxx| 中文字幕精品影院| 精品久久久精品| 国产精品www网站| 国产精品视频一区二区高潮| 国外成人在线视频| 日韩中文字幕第一页| 久久av资源网站| 91av免费观看91av精品在线| 国产精品日韩久久久久| 在线观看欧美日韩国产| www.欧美精品一二三区| 在线观看欧美www| 国产精品一区专区欧美日韩| 欧美大全免费观看电视剧大泉洋| 日韩禁在线播放| 亚洲自拍小视频| 91久久在线播放| 日韩有码视频在线| 91亚洲精华国产精华| 亚洲欧美日韩成人| 最近2019年好看中文字幕视频| 欧美电影院免费观看| 亚洲美女性生活视频| 岛国视频午夜一区免费在线观看| 91精品国产91久久久久福利| 成人午夜小视频| 2018日韩中文字幕| 中文字幕精品一区二区精品| 麻豆国产va免费精品高清在线| 久久国产精品久久久久久久久久| 亚洲精品国产精品国自产在线| 国产精品成人久久久久| 午夜精品www| 成人97在线观看视频| 久久这里有精品| 日韩精品一区二区视频| 久久躁日日躁aaaaxxxx| 成人美女免费网站视频| 精品视频在线观看日韩| 中文字幕一区二区三区电影| 91精品在线播放| 亚洲精品视频中文字幕| 97在线免费观看| 精品成人av一区|