قم بتنزيل الملف من الويب إلى الملف المحلي مع تقدم متر في C #

StackOverflow https://stackoverflow.com/questions/1108292

  •  12-09-2019
  •  | 
  •  

سؤال

لدي تطبيق صغير يقوم بتنزيل بعض الملفات من خادم بعيد (HTTP) إلى محرك الأقراص الصلبة المحلي للمستخدمين، وبعض الملفات كبيرة، لكنني لا أعرف كيف كبيرة في وقت التشغيل. هل هناك أي طريقة تسمح لي بتنزيل ملف مع نوع من متر المرر؟

هذا هو تطبيق WinForms، الآن أنا أستخدم WebClient.downloadfile () لتنزيل الملف.

تحرير: نظرت إلى التنزيلات في جميع الأحداثالأحداث عبر الإنترنت ويبدو أنها تعمل بشكل جيد، لكنها لن تعمل من أجل الحل الخاص بي. أقوم بتنزيل العديد من الملفات وإذا كنت أستخدم WebClient.downloadfileAesync ثم يسمى الحدث عدة مرات / ثانية لأن كل ملف يسميه.
هنا هي الهيكل الأساسي للتطبيق:

  • قم بتنزيل قائمة الملفات عادة حوالي 114
  • قم بتشغيل حلقة عبر قائمة الملفات وتنزيل كل منها على صوابها

لا أمانع في تنزيل كل ملف منفصلة ولكن دون تنزيلها مع DownloadFileAsync () لا يمكنني استخدام معالجات الأحداث.

هل كانت مفيدة؟

المحلول

يستخدم WebClient.ondownloadprogresschanged.. وبعد ضع في اعتبارك أنه من الممكن حساب التقدم المحرز إلا إذا أراد الخادم عن الحجم مقدما.

تعديل:

النظر إلى التحديث الخاص بك، ما يمكنك محاولة هو جعل طابور عناوين URL. ثم، عند انتهاء الملف ينتهي تنزيل (downloaddaCompleted. الحدث)، ستطلق تنزيل ASYNC من عنوان URL التالي في قائمة الانتظار. لم اختبر هذا.

نصائح أخرى

التعامل مع weblient DownloadProgressChanged. حدث.

لقد كتبت للتو هذا، وبالتأكيد يبدو أن تفعل ما تريد.

أيضا، ضمن الحدث التقدمي الذي حصلت عليه "TalotbyTestoreceive" الممتلكات "BytesReceiSed".

private void StartDownload()
{

    // Create a new WebClient instance.
    WebClient myWebClient = new WebClient();

    // Set the progress bar max to 100 for 100%
    progressBar1.Value = 0;
    progressBar1.Maximum = 100;

    // Assign the events to capture the progress percentage
    myWebClient.DownloadDataCompleted+=new DownloadDataCompletedEventHandler(myWebClient_DownloadDataCompleted);
    myWebClient.DownloadProgressChanged+=new DownloadProgressChangedEventHandler(myWebClient_DownloadProgressChanged);

    // Set the Uri to the file you wish to download and fire it off Async
    Uri uri = new Uri("http://external.ivirtualdocket.com/update.cab");
    myWebClient.DownloadFileAsync(uri, "C:\\Update.cab");

}

void myWebClient_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
{
    progressBar1.Value = e.ProgressPercentage;
}

void myWebClient_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
    progressBar1.Value = progressBar1.Maximum;
}

كنت بحاجة إلى حل مشكلة مماثلة، ومثال رمز بتنسيق الجسم باستثناء أنني اكتشفت أنه لا يتم إطلاق الحدث DownloadDAtCompleted عند استدعاء أسلوب DownloadFilEasync. بدلا من ذلك، يتم رفع الحدث DownloadFilecmoded.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top