diff --git a/Netch/Controllers/UpdateChecker.cs b/Netch/Controllers/UpdateChecker.cs index 5ce0057c..3f7ee63a 100644 --- a/Netch/Controllers/UpdateChecker.cs +++ b/Netch/Controllers/UpdateChecker.cs @@ -25,14 +25,14 @@ namespace Netch.Controllers public event EventHandler NewVersionFoundFailed; public event EventHandler NewVersionNotFound; - public void Check(bool isPreRelease) + public async void Check(bool isPreRelease) { try { var updater = new GitHubRelease(Owner, Repo); var url = updater.AllReleaseUrl; - var json = WebUtil.DownloadString(WebUtil.CreateRequest(url)); + var json = await WebUtil.DownloadStringAsync(WebUtil.CreateRequest(url)); var releases = JsonConvert.DeserializeObject>(json); var latestRelease = VersionUtil.GetLatestRelease(releases, isPreRelease); diff --git a/Netch/Utils/WebUtil.cs b/Netch/Utils/WebUtil.cs index 827e5b9b..5aab2dcf 100644 --- a/Netch/Utils/WebUtil.cs +++ b/Netch/Utils/WebUtil.cs @@ -26,76 +26,51 @@ namespace Netch.Utils return req; } + + /// + /// 异步下载 + /// /// /// - /// - public static async Task DownloadStringAsync(HttpWebRequest req) + public static async Task DownloadBytesAsync(HttpWebRequest req) { - string content; - var response = (HttpWebResponse) await req.GetResponseAsync(); - using (var responseStream = response.GetResponseStream()) - { - using (var sr = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"))) - { - content = await sr.ReadToEndAsync(); - } - } + using var webResponse = (HttpWebResponse) await req.GetResponseAsync(); + using var memoryStream = new MemoryStream(); + using var input = webResponse.GetResponseStream(); - response.Close(); - return content; + await input.CopyToAsync(memoryStream); + return memoryStream.ToArray(); } + /// + /// 异步下载并编码为字符串 + /// /// + /// 编码,默认UTF-8 /// - /// - public static async Task> DownloadBytesAsync(HttpWebRequest req) + public static async Task DownloadStringAsync(HttpWebRequest req, string encoding = "UTF-8") { - var content = new List(); - var buffer = new byte[1024]; - var response = (HttpWebResponse) await req.GetResponseAsync(); - using (var responseStream = response.GetResponseStream()) - { - await responseStream.ReadAsync(buffer, 0, buffer.Length); - content.AddRange(buffer); - } + using var webResponse = await req.GetResponseAsync(); + using var responseStream = webResponse.GetResponseStream(); + using var streamReader = new StreamReader(responseStream, Encoding.GetEncoding(encoding)); - response.Close(); - return content; - } - - /// - /// - /// - public static string DownloadString(HttpWebRequest req) - { - string content; - var response = (HttpWebResponse) req.GetResponse(); - using (var responseStream = response.GetResponseStream()) - { - using (var sr = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"))) - { - content = sr.ReadToEnd(); - } - } - - response.Close(); - return content; + return await streamReader.ReadToEndAsync(); } + /// + /// 异步下载到文件 + /// /// /// - /// + /// public static async Task DownloadFileAsync(HttpWebRequest req, string fileFullPath) { using var webResponse = (HttpWebResponse) await req.GetResponseAsync(); - var fileStream = File.OpenWrite(fileFullPath); - using (var input = webResponse.GetResponseStream()) - { - await input.CopyToAsync(fileStream); - } + using var input = webResponse.GetResponseStream(); + using var fileStream = File.OpenWrite(fileFullPath); + await input.CopyToAsync(fileStream); fileStream.Flush(); - fileStream.Close(); } } } \ No newline at end of file