


Detaillierte grafische Erläuterung des von WebClient in C# implementierten Datei-Download-Codes
Dieser Artikel stellt hauptsächlich die Implementierung des Datei-Downloads durch WebClient in C# vor. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz geben. Folgen wir dem Editor und werfen wir einen Blick darauf
Angesichts verschiedener komplexer Netzwerkumgebungen hat der Autor beschlossen, verschiedene Programmierschnittstellen zu verwenden, um das Herunterladen zu versuchen und die Benutzerfreundlichkeit des Programms zu erhöhen.
Hier stellen wir nur die Methode zur Verwendung von WebClient vor, und in den folgenden Artikeln werden andere Methoden vorgestellt. Der Blog-Beitrag stellt hauptsächlich die Ideen und Schlüsselcodes vor, und die vollständige Demo ist am Ende des Artikels angehängt.
Verwenden Sie einen Proxy, um auf das Internet zuzugreifen
Viele Mitarbeiter des Unternehmens greifen über vom Unternehmen eingerichtete Proxys auf das Internet zu. Der Zugriff auf das Internet über einen Proxy dient hauptsächlich dazu, dem Unternehmen die Durchführung verschiedener Kontrollen zu erleichtern. Natürlich können auch einige Sonderfunktionen implementiert werden. Dies führt jedoch zu einigen Problemen für den Zugriff unseres Programms auf das Netzwerk.
Tatsächlich ist die API in WebClient bereits sehr intelligent. Das von uns erstellte HttpWebRequest-Objekt verfügt beispielsweise über ein Proxy-Attribut. Das heißt, WebHttpRequest verwendet standardmäßig den gefundenen Proxy. Das ist großartig und kann mit vielen Situationen umgehen. Wenn dieser Standard-Proxy jedoch die Identitätsinformationen von Domänenbenutzern überprüfen muss, schlägt die Verwendung von WebHttpRequest für den Zugriff auf das Netzwerk möglicherweise fehl. Schauen Sie sich nun die Eigenschaft Proxy.Credentials an und stellen Sie fest, dass sie null ist.
Die Standardanmeldeinformationen des Systems können von der WebClient-API abgerufen werden, es ist jedoch nicht klar, warum die Proxy.Credentials-Eigenschaft nicht standardmäßig auf diesen Wert festgelegt ist. Wir können es einfach selbst festlegen.
request.Proxy.Credentials = CredentialCache.DefaultCredentials;
Aber die tatsächliche Netzwerkumgebung kann komplexer sein, da Benutzer den Proxy für das Netzwerk und die für das Netzwerk erforderlichen Anmeldeinformationen angeben müssen. Der Text lautet wie folgt:
myProxy = new WebProxy("proxyAddress"); myProxy.Credentials = new NetworkCredential(ProxyUserName, ProxyUserPasswd, DomainName);
Cache überwinden
Caching ist überall , wird es einen Cache im serverseitigen CDN geben, und es wird auch einen Cache in der Proxy-Schicht des Clients geben. Ein häufiges Problem ist also: Obwohl die Dateien auf dem Server aktualisiert wurden, laden einige Kunden immer noch die alten Dateien herunter. Befassen wir uns zunächst mit dem Caching-Problem des Clients.
Die CachePolicy.Level-Eigenschaft von HttpWebRequest wird zum Festlegen der Cache-Richtlinie verwendet, ihr Standardwert ist jedoch BypassCache. Wir ändern es einfach in „Neu laden“:
Kopieren Sie den Code Der Code lautet wie folgt:
request.CachePolicy = new System .Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.Reload);
Der nächste Schritt ist das serverseitige Caching-Problem.
Heutzutage scheint jeder CDN zu verwenden, aber während der Nutzung stellt sich häufig heraus, dass es Probleme mit der Cache-Aktualisierung auf der CDN-Seite gibt. Ich habe online gesucht und keine gute Lösung gefunden, aber es gibt einen guten Workaround, der darin besteht, der Anfrage eine zufällige Zeichenfolge als Parameter hinzuzufügen.
Random rdm = new Random(); string s = rdm.Next().ToString(); myUrl += "?" + s;
Es ist zu beachten, dass Sie beim Caching eine Strategie verwenden müssen, die zum aktuellen Anwendungsfall passt und keine Einheitslösung sein darf .
Benutzerfreundlicherer Download-Prozess
Verwenden Sie Bildlaufleisten, um den Download-Fortschritt anzuzeigen, die Download-Geschwindigkeit in Echtzeit anzuzeigen und Benutzern das Abbrechen von Downloads zu ermöglichen:
Das Folgende ist der Kerncode zum Herunterladen. Wir unterteilen ihn in die Berechnung des Download-Prozentsatzes und die Berechnung der aktuellen Download-Geschwindigkeit.
// 获得下载文件的长度 double contentLength = DownloadManager.GetContentLength(myHttpWebClient); byte[] buffer = new byte[BufferSize]; long downloadedLength = 0; long currentTimeSpanDataLength = 0; int currentDataLength; while ((currentDataLength = stream.Read(buffer, 0, BufferSize)) > 0 && !this._cancelDownload) { fileStream.Write(buffer, 0, currentDataLength); downloadedLength += (long)currentDataLength; currentTimeSpanDataLength += (long)currentDataLength; int intDownloadSpeed = 0; if (this._downloadStopWatch.ElapsedMilliseconds > 800) { double num5 = (double)currentTimeSpanDataLength / 1024.0; double num6 = (double)this._downloadStopWatch.ElapsedMilliseconds / 1000.0; double doubleDownloadSpeed = num5 / num6; intDownloadSpeed = (int)Math.Round(doubleDownloadSpeed, 0); this._downloadStopWatch.Reset(); this._downloadStopWatch.Start(); currentTimeSpanDataLength = 0; } double doubleDownloadPersent = 0.0; if (contentLength > 0.0) { doubleDownloadPersent = (double)downloadedLength / contentLength; } }
Berechnen Sie den Download-Prozentsatz während des Downloadvorgangs
Zuerst benötigen Sie Um zu beginnen, ermitteln Sie die Länge der herunterzuladenden Datei in der HTTP-Anfrage. Weitere Informationen finden Sie in der in diesem Artikel enthaltenen Demo.
double contentLength = DownloadManager.GetContentLength(myHttpWebClient);
Jedes Mal, wenn Daten aus dem Dateistream gelesen werden, wissen wir, wie viele Bytes gelesen wurden (currentDataLength), und kumulativ bedeutet dies, dass dies der Fall ist Bisher heruntergeladene Dateilänge.
downloadedLength += (long)currentDataLength;
Dann machen Sie einfach eine Division:
doubleDownloadPersent = (double)downloadedLength / contentLength;
Download-Geschwindigkeit in Echtzeit berechnen
Für die aktuelle Download-Geschwindigkeit berechnen wir die Anzahl der im vergangenen Zeitraum heruntergeladenen Bytes. Der Zeitraum kann mit StopWatch ermittelt werden. Der von mir ausgewählte Zeitraum erfordert mehr als 800 Millisekunden.
if (this._downloadStopWatch.ElapsedMilliseconds > 800) { /***********************************/ // 计算上一个时间段内的下载速度 double num5 = (double)currentTimeSpanDataLength / 1024.0; double num6 = (double)this._downloadStopWatch.ElapsedMilliseconds / 1000.0; double doubleDownloadSpeed = num5 / num6; /***********************************/ intDownloadSpeed = (int)Math.Round(doubleDownloadSpeed, 0); // 本次网速计算完成后重置时间计时器和数据计数器,开始下次的计算 this._downloadStopWatch.Reset(); this._downloadStopWatch.Start(); currentTimeSpanDataLength = 0; }
Tatsächlich ist die Länge des Zeitraums für die Berechnung der Download-Geschwindigkeit nicht festgelegt, dies hat jedoch keinen Einfluss auf die Berechnungsergebnisse Sie müssen sicherstellen, dass der Abstand beträgt. Es ist in Ordnung, wenn die Berechnung mehr als 800 Millisekunden dauert.
Dem Benutzer erlauben, den Download abzubrechen
Für eine Aufgabe, deren Ausführung lange dauert, ist es nicht möglich, dass der Benutzer sie abbrechen kann zutiefst gehasst! Vor allem, wenn die Internetgeschwindigkeit nicht sehr gut ist. Wir müssen den Benutzern also die Wahl lassen: Sie können die aktuelle Reise glücklich (und nicht schmerzhaft) beenden.
Und bei uns ist das alles so einfach!
Der Code lautet wie folgt:
while ((currentDataLength = stream.Read(buffer, 0, BufferSize)) > 0 && !this._cancelDownload){}
Beim Lesen von Daten aus dem Datenstrom prüfen wir, ob der Benutzer die Schaltfläche „Abbrechen“ gedrückt hat. Dies ist dieser._cancelDownload hier Variable. Wenn dies der Fall ist, beenden Sie den aktuellen Download.
Zu diesem Zeitpunkt wurden die häufigsten Beschwerden von Benutzern behoben. Tatsächlich wurde nicht viel Code hinzugefügt und jeder Wissenspunkt scheint so subtil zu sein. Aber es verbessert offensichtlich das Benutzererlebnis. Dies hat uns auch einige Inspirationen gebracht. Andere Aufgaben sind möglicherweise nicht so offensichtlich und erfordern ständiges Erleben und Entdecken...
Demo-Download-Adresse: WebClientDemo_jb51. rar
Das Obige ist die grafische und textliche Erklärung des WebClient-Implementierungsdatei-Downloadcodes in C#. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).

C# ist eine Programmiersprache, während .NET ein Software -Framework ist. 1.C# wird von Microsoft entwickelt und ist für die Entwicklung von mehreren Plattformarbeiten geeignet. 2..NET bietet Klassenbibliotheken und Laufzeitumgebungen und unterstützt mehrsprachige. Die beiden arbeiten zusammen, um moderne Anwendungen aufzubauen.

C# .NET ist eine leistungsstarke Entwicklungsplattform, die die Vorteile des C# Language- und .NET -Frameworks kombiniert. 1) Es wird häufig in Unternehmensanwendungen, Webentwicklung, Spielentwicklung und mobiler Anwendungsentwicklung verwendet. 2) C# Code wird in eine Zwischensprache zusammengestellt und von der .NET Runtime -Umgebung ausgeführt, wobei die Müllsammlung, Typsicherheit und LINQ -Abfragen unterstützt werden. 3) Beispiele für die Nutzung umfassen grundlegende Konsolenausgabe und erweiterte LINQ -Abfragen. 4) Häufige Fehler wie leere Referenzen und Typ -Konvertierungsfehler können durch Debugger und Protokollierung gelöst werden. 5) Vorschläge zur Leistungsoptimierung umfassen asynchrone Programmierungen und Optimierung von LINQ -Abfragen. 6) Trotz des Wettbewerbs behält C#.NET seine wichtige Position durch kontinuierliche Innovation bei.

Die zukünftigen Trends von C#.NET konzentrieren sich hauptsächlich auf drei Aspekte: Cloud Computing, Microservices, KI und maschinelle Lernintegration und plattformübergreifende Entwicklung. 1) Cloud Computing und Microservices: C#.NET optimiert die Cloud -Umgebungsleistung über die Azure -Plattform und unterstützt die Konstruktion einer effizienten Microservice -Architektur. 2) Integration von KI und maschinellem Lernen: Mit Hilfe der ML.NET -Bibliothek können C# -Entwickler maschinelle Lernmodelle in ihre Anwendungen einbetten, um die Entwicklung intelligenter Anwendungen zu fördern. 3) plattformübergreifende Entwicklung: Durch .NetCore und .NET5 können C# -Anwendungen unter Windows, Linux und MacOS ausgeführt werden, wodurch der Bereitstellungsbereich erweitert wird.

Zu den neuesten Entwicklungen und Best Practices in der C#.NET-Entwicklung gehören: 1. Asynchrone Programmierung verbessert die Reaktionsfähigkeit der Anwendungen und vereinfacht nicht blockierende Code mit Async und wartet Keywords. 2. LINQ liefert leistungsstarke Abfragefunktionen, die Daten effizient durch verzögerte Ausführung und Ausdrucksbäume manipulieren. 3. Die Vorschläge zur Leistungsoptimierung umfassen die Verwendung der asynchronen Programmierung, die Optimierung von LINQ -Abfragen, die rationale Verwaltung des Speichers, die Verbesserung der Code -Lesbarkeit und -wartung und das Schreiben von Unit -Tests.

Wie erstelle ich Anwendungen mit .NET? Erstellen Anwendungen mit .NET können in den folgenden Schritten erreicht werden: 1) Verstehen Sie die Grundlagen von .NET, einschließlich C# Sprache und plattformübergreifender Entwicklungsunterstützung; 2) Kernkonzepte wie Komponenten und Arbeitsprinzipien des .NET -Ökosystems lernen; 3) Master Basic und Advanced Nutzung, von einfachen Konsolenanwendungen bis hin zu komplexen Webapis- und Datenbankvorgängen; 4) Mit gemeinsamen Fehlern und Debugging -Techniken wie Konfigurations- und Datenbankverbindungsproblemen vertraut sein; 5) Optimierung der Anwendungsleistung und Best Practices wie asynchrone Programmieren und Zwischenspeichern.

C# wird häufig in Anwendungen auf Unternehmensebene, Spieleentwicklung, mobilen Anwendungen und Webentwicklung verwendet. 1) In Anwendungen auf Unternehmensebene wird C# häufig für ASP.NetCore zur Entwicklung von WebAPI verwendet. 2) In der Spielentwicklung wird C# mit der Unity Engine kombiniert, um die Rollenkontrolle und andere Funktionen zu realisieren. 3) C# unterstützt Polymorphismus und asynchrone Programmierung, um die Code -Flexibilität und die Anwendungsleistung zu verbessern.

C# und .NET eignen sich für Web-, Desktop- und Mobile -Entwicklung. 1) In der Webentwicklung unterstützt ASP.NetCore die plattformübergreifende Entwicklung. 2) Die Desktop -Entwicklung verwendet WPF und Winforms, die für unterschiedliche Anforderungen geeignet sind. 3) Mobile Entwicklung realisiert plattformübergreifende Anwendungen über Xamarin.

Das C#.NET -Ökosystem bietet reichhaltige Frameworks und Bibliotheken, mit denen Entwickler Anwendungen effizient erstellen können. 1.asp.netcore wird verwendet, um Hochleistungs-Webanwendungen zu erstellen. Durch das Verständnis der Nutzung und Best Practices dieser Tools können Entwickler die Qualität und Leistung ihrer Anwendungen verbessern.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.
