Многочисленные ошибки при попытке загрузки с C# - PullRequest
0 голосов
/ 26 февраля 2020

Введение:

Здравствуйте, я пытался создать программу с приложением WinForms, которая загружает указанные c .zip файлы, но я получаю следующие ошибки:

Пользовательский интерфейс выглядит как

enter image description here

Ошибки, которые я получаю

enter image description here

Код:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using System.Net;
using System.Threading;
namespace Universal_Installer
{
    public partial class Form1 : Form
    {
        WebClient wc;
        public Form1()
        {
            InitializeComponent();
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog def = new FolderBrowserDialog();
            def.RootFolder = Environment.SpecialFolder.Desktop;
            def.Description = "Select installation location...";
            def.ShowNewFolderButton = true;
            if (def.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = def.SelectedPath;
            }
        }

        private void Button2_Click(object sender, EventArgs e)
        {
            if (!Directory.Exists(textBox1.Text))
            {
                MessageBox.Show("The selected path does not exist!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (Directory.Exists(textBox1.Text))
            {
                string inst_size = "n/a";
                string name = "n/a";
                bool able = false;
                string downloadlink = "n/a";
                string PeoplePlaygroundSize = "0.161";
                string PrisonArchitectSize = "0.586";
                string AnotherBrickInTheMallSize = "0.164";
                if (PP.Checked == true)
                {
                    inst_size = PeoplePlaygroundSize;
                    downloadlink = "(A download link)";
                    name = "People Playground.zip";
                    able = true;
                }
                else if (PA.Checked == true)
                {
                    inst_size = PrisonArchitectSize;
                    downloadlink = "(A download link)";
                    name = "Prison Architect.zip";
                    able = true;
                }
                else if (ABITM.Checked == true)
                {
                    inst_size = AnotherBrickInTheMallSize;
                    downloadlink = "(A download link)";
                    name = "Another Brick In The Mall.zip";
                    able = true;
                }
                if (able == false)
                {
                    MessageBox.Show("No checkboxes are checked!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else if (MessageBox.Show("Are you sure you want to install a " + inst_size + " GB game?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    status.Text = "Status: DOWNLOADING (" + inst_size + " GB)";
                    //////
                    ABITM.Enabled = false;
                    PP.Enabled = false;
                    PA.Enabled = false;
                    textBox1.Enabled = false;
                    button1.Enabled = false;
                    button2.Enabled = false;
                    //////
                    Thread thread = new Thread(() =>
                    {
                        Uri uri = new Uri(downloadlink);
                        string filename = System.IO.Path.GetFileName(uri.AbsolutePath);
                        wc.DownloadFileAsync(uri, textBox1.Text + "/" + filename);
                    });
                    thread.Start();

                }
            }
        }
        private void FileDownloadComplete(object sender,AsyncCompletedEventArgs e)
        {
            status.Text = "Status: IDLE";
            PBAR.Value = 0;
            MessageBox.Show("Download Completed (PATH: "+textBox1.Text+")", "Finished", MessageBoxButtons.OK, MessageBoxIcon.Information);
            ABITM.Enabled = true;
            PP.Enabled = true;
            PA.Enabled = true;
            textBox1.Enabled = true;
            button1.Enabled = true;
            button2.Enabled = true;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            wc = new WebClient();
            wc.DownloadProgressChanged += wc_DownloadProgressChanged;
            wc.DownloadFileCompleted += FileDownloadComplete;
        }

        private void wc_DownloadProgressChanged(object sender, AsyncCompletedEventArgs e)
        {
            Invoke(new MethodInvoker(delegate ()
            {
                PBAR.Minimum = 0;
                double recive = double.Parse(e.BytesReceived.ToString());
                double total = double.Parse(e.TotalBytesToReceive.ToString());
                double percentage = recive / total * 100;
                PBAR.Value = int.Parse(Math.Truncate(percentage).ToString());
            }));
        }
    }
}


Справка:

Любая помощь? Кстати, если вы видите какой-либо текст, заканчивающийся на .Text или .Value et c ... это означает, что они являются объектами. Кстати, мне очень нужна твоя помощь ...

1 Ответ

0 голосов
/ 26 февраля 2020

Согласно официальной документации , второй аргумент для DownloadProgressChanged должен быть DownloadProgressChangedEventArgs вместо AsyncCompletedEventArgs.

private void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    Invoke(new MethodInvoker(delegate ()
    {
        PBAR.Minimum = 0;
        double recive = double.Parse(e.BytesReceived.ToString());
        double total = double.Parse(e.TotalBytesToReceive.ToString());
        double percentage = recive / total * 100;
        PBAR.Value = int.Parse(Math.Truncate(percentage).ToString());
    }));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...