Browse Source

Get Proxy Server for Web Client asynchronously

This prevents WebRequest.GetSystemWebProxy() from blocking UI
pull/546/head
Linquize 10 years ago
parent
commit
3bf6f9b31f
  1. 48
      ILSpy/AboutPage.cs

48
ILSpy/AboutPage.cs

@ -179,30 +179,32 @@ namespace ICSharpCode.ILSpy
static Task<AvailableVersionInfo> GetLatestVersionAsync() static Task<AvailableVersionInfo> GetLatestVersionAsync()
{ {
var tcs = new TaskCompletionSource<AvailableVersionInfo>(); var tcs = new TaskCompletionSource<AvailableVersionInfo>();
WebClient wc = new WebClient(); new Action(() => {
IWebProxy systemWebProxy = WebRequest.GetSystemWebProxy(); WebClient wc = new WebClient();
systemWebProxy.Credentials = CredentialCache.DefaultCredentials; IWebProxy systemWebProxy = WebRequest.GetSystemWebProxy();
wc.Proxy = systemWebProxy; systemWebProxy.Credentials = CredentialCache.DefaultCredentials;
wc.DownloadDataCompleted += delegate(object sender, DownloadDataCompletedEventArgs e) { wc.Proxy = systemWebProxy;
if (e.Error != null) { wc.DownloadDataCompleted += delegate(object sender, DownloadDataCompletedEventArgs e) {
tcs.SetException(e.Error); if (e.Error != null) {
} else { tcs.SetException(e.Error);
try { } else {
XDocument doc = XDocument.Load(new MemoryStream(e.Result)); try {
var bands = doc.Root.Elements("band"); XDocument doc = XDocument.Load(new MemoryStream(e.Result));
var currentBand = bands.FirstOrDefault(b => (string)b.Attribute("id") == band) ?? bands.First(); var bands = doc.Root.Elements("band");
Version version = new Version((string)currentBand.Element("latestVersion")); var currentBand = bands.FirstOrDefault(b => (string)b.Attribute("id") == band) ?? bands.First();
string url = (string)currentBand.Element("downloadUrl"); Version version = new Version((string)currentBand.Element("latestVersion"));
if (!(url.StartsWith("http://", StringComparison.Ordinal) || url.StartsWith("https://", StringComparison.Ordinal))) string url = (string)currentBand.Element("downloadUrl");
url = null; // don't accept non-urls if (!(url.StartsWith("http://", StringComparison.Ordinal) || url.StartsWith("https://", StringComparison.Ordinal)))
latestAvailableVersion = new AvailableVersionInfo { Version = version, DownloadUrl = url }; url = null; // don't accept non-urls
tcs.SetResult(latestAvailableVersion); latestAvailableVersion = new AvailableVersionInfo { Version = version, DownloadUrl = url };
} catch (Exception ex) { tcs.SetResult(latestAvailableVersion);
tcs.SetException(ex); } catch (Exception ex) {
tcs.SetException(ex);
}
} }
} };
}; wc.DownloadDataAsync(UpdateUrl);
wc.DownloadDataAsync(UpdateUrl); }).BeginInvoke(null, null);
return tcs.Task; return tcs.Task;
} }

Loading…
Cancel
Save