Как получить размер всех ссылок в richtextbox или textbox

Я пытаюсь получить размер моих прямых ссылок в richtextbox. в richtextbox существует 20 или 30 ссылок. мой код работает на одну ссылку. Как я могу получить размер всех ссылок, которые существуют в richtextbox? это мой код:

private void button1_Click(object sender, EventArgs e)
{
    HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(richTextBox1.Text);
    hwr.Method = "HEAD";
    HttpWebResponse res = (HttpWebResponse)hwr.GetResponse();
    long len = res.ContentLength;
    long a = len / 1024;
    long b = a / 1024;
    MessageBox.Show(b.ToString() + " MB");
}

1 ответ

Мое предложение зависит от того, как выглядит ваш richTextBox.Text, но если у него есть определенный разделитель - должен работать приведенный ниже код - он разделит ваш текст на строки, а затем выполнит ваш запрос в каждой строке:

private void button1_Click(object sender, EventArgs e)
{
    string[] movies = richTextBox1.Text.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
    foreach (string item in movies)
    {
      item.Trim();
      HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(item);
      hwr.Method = "HEAD";
      HttpWebResponse res = (HttpWebResponse)hwr.GetResponse();
      long len = res.ContentLength;
      long a =len/1024;
      long b = a / 1024;
      MessageBox.Show(b.ToString()+" MB");
    }
}

РЕДАКТИРОВАТЬ - Я думаю, что код будет работать лучше, если бы он был асинхронным, он может выглядеть так:

    List<long> Length = new List<long>();
    List<string> Movies = new List<string>();

    private async void button1_Click(object sender, EventArgs e)
    {
        await getLength(Regex.Split(richTextBox1.Text, "\r\n|\r|\n"));
        string text = "";
        for (int i = 0; i < Movies.Count; i++)
            text += Movies[i] + " Length: " + Length[i].ToString() + "\n";
        MessageBox.Show(text);
    }

    private async Task getLength(string[] movies)
    {
        Task[] tasks = new Task[movies.Length];
        for (int i = 0; i < movies.Length; i++)
        {
            Movies.Add(movies[i].Trim());
            Length.Add(0);
            tasks[i] = getOnesLength(i);
        }
        await Task.WhenAll(tasks);
    }

    private async Task getOnesLength(int index)
    {
        HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(Movies[index]);
        hwr.Method = "HEAD";
        HttpWebResponse res = (HttpWebResponse) await hwr.GetResponseAsync();
        long len = res.ContentLength;
        long a = len / 1024;
        long b = a / 1024;
        Length[index] = b;
    }

В этом случае ваш пользовательский интерфейс не должен быть заблокирован, и вы должны увидеть MessageBox, когда получение информации для всех ссылок завершено. Конечно, в этом коде отсутствует обработка исключений и так далее, но это может быть хорошим началом.

Другие вопросы по тегам