Как получить размер всех ссылок в 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, когда получение информации для всех ссылок завершено. Конечно, в этом коде отсутствует обработка исключений и так далее, но это может быть хорошим началом.