事件发现当互联网丢失

我正在使用C#创build一个Windows应用程序。 它用于检查产品的任何更新版本是否可用。 如果是的话,用户可以使用应用程序的用户界面下载它,而无需打开任何浏览器。

应用程序中的一个窗口使用ProgressBar控件显示下载的状态。 问题是,如果互联网断开,应用程序不知道。 说下载45%后,networking断开连接; 但ProgressBar不断显示45%。

一旦发生这种情况,是否有任何财产/事件? 请帮忙。 附上我的代码以供参考。 谢谢。

private void CheckForUpdate_Load(object sender, EventArgs e) { string downloadURL = Convert.ToString(ConfigurationManager.AppSettings["TempDownloadURL"]); WebClient wcDownloadFile = new WebClient(); Uri myUri = new Uri(downloadURL); wcDownloadFile.DownloadFileAsync(myUri, downloadLocation); wcDownloadFile.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wcDownloadFile_DownloadProgressChanged); } void wcDownloadFile_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) { try { int bytesDownloaded = Int32.Parse(e.BytesReceived.ToString()); int totalBytes = Int32.Parse(e.TotalBytesToReceive.ToString()); progBarSoftPhone.Value = e.ProgressPercentage; lblStatus.Text = (bytesDownloaded / 1024).ToString() + " KB out of " + (totalBytes / 1024).ToString() + " KB downloaded (" + e.ProgressPercentage.ToString() + "%)."; } catch (Exception ex) { MessageBox.Show("ERROR: " + ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error); } } 

  1. 你可以使用NetworkChange.NetworkAvailabilityChanged事件http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkchange.networkavailabilitychanged.aspx这将告诉你在LAN的问题,例如:网络拔下电缆或用户自己禁用NetworkInterface。

  2. 在网络丢失的情况下,您需要在自己的服务器上安装一些Ping机制来检查服务器是否可达,启动下载ping时可以启动计时器,并定期检查直到下载完成,一旦下载完成或用户取消你可以停止计时器。

为DownloadFileCompleted事件添加事件侦听器,并检查AsyncCompletedEventArgs的Error属性。

在您的CheckForUpdate_Load方法中添加:

 wcDownloadFile.DownloadFileCompleted += WebClOnDownloadFileCompleted; 

然后在处理程序中,您可以停止进度栏,以防发生错误:

 private void WebClOnDownloadFileCompleted(object sender, AsyncCompletedEventArgs asyncCompletedEventArgs) { if (asyncCompletedEventArgs.Error != null) // code to handle it }