private void CheckForUpdateAsync(object state) { if (state == null) { if (DateTime.UtcNow < _lastUpdateCheckedOn.AddDays(_checkUpdateIntervalDays)) return; } //update last check time _lastUpdateCheckedOn = DateTime.UtcNow; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_checkUpdateURL); request.UserAgent = GetUserAgent(); request.IfModifiedSince = _lastModifiedGMT; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); switch (response.StatusCode) { case HttpStatusCode.OK: _updateInfo = new UpdateInfo(response.GetResponseStream()); _lastModifiedGMT = DateTime.Parse(response.Headers["Last-Modified"]); if (_updateInfo.IsUpdateAvailable(_currentVersion)) { //update available, stop timer _checkTimer.Change(Timeout.Infinite, Timeout.Infinite); //raise event to user UI RaiseEventUpdateAvailable(); } else { //if manual check then raise event if (state != null) RaiseEventNoUpdateAvailable(); } break; default: //if manual check then raise event if (state != null) RaiseEventNoUpdateAvailable(); break; } } catch (WebException ex) { HttpWebResponse response = ex.Response as HttpWebResponse; if (response != null) { switch (response.StatusCode) { case HttpStatusCode.NotModified: case HttpStatusCode.NotFound: //if manual check then raise event if (state != null) RaiseEventNoUpdateAvailable(); break; default: //if manual check then raise event if (state != null) RaiseEventUpdateError(ex); break; } } else { //if manual check then raise event if (state != null) RaiseEventUpdateError(ex); } } catch (Exception ex) { //if manual check then raise event if (state != null) RaiseEventUpdateError(ex); } if (state != null) _checkUpdate = null; }
private void CheckForUpdateAsync(object state) { if (state == null) { if (DateTime.UtcNow < _lastUpdateCheckedOn.AddDays(_checkUpdateIntervalDays)) { return; } } //update last check time _lastUpdateCheckedOn = DateTime.UtcNow; try { using (WebClientEx client = new WebClientEx()) { client.Proxy = _proxy; client.UserAgent = GetUserAgent(); client.IfModifiedSince = _lastModifiedGMT; byte[] responseData = client.DownloadData(_checkUpdateURL); _updateInfo = new UpdateInfo(new MemoryStream(responseData, false)); _lastModifiedGMT = DateTime.Parse(client.ResponseHeaders["Last-Modified"]); if (_updateInfo.IsUpdateAvailable(_currentVersion)) { //update available, stop timer _checkTimer.Change(Timeout.Infinite, Timeout.Infinite); //raise event to user UI RaiseEventUpdateAvailable(); } else { //if manual check then raise event if (state != null) { RaiseEventNoUpdateAvailable(); } } } } catch (WebException ex) { HttpWebResponse response = ex.Response as HttpWebResponse; if (response != null) { switch (response.StatusCode) { case HttpStatusCode.NotModified: case HttpStatusCode.NotFound: //if manual check then raise event if (state != null) { RaiseEventNoUpdateAvailable(); } break; default: //if manual check then raise event if (state != null) { RaiseEventUpdateError(ex); } break; } } else { //if manual check then raise event if (state != null) { RaiseEventUpdateError(ex); } } } catch (Exception ex) { //if manual check then raise event if (state != null) { RaiseEventUpdateError(ex); } } if (state != null) { _checkUpdate = null; } }