Донаты и на кофе ➜ t.me/win10twea... Эксклюзив для спонсоров ➜ / xpuct Если недоступна спонсорка ➜ Основной канал: / jailbreakvideo Форум по C#: win10tweaker.r... #ProgressBar #WebClient #HttpWebRequest #WebResponse #СиSharp #СиШарп
Хорошие уроки !!! Спс. Запрашивать размер данных через Header не всегда хорошо. В данном случае хедер генерируется сервером хостинга от куда качаются данные, но если у вас будет серверная программа, которая бы принимала данные от другой программы, тогда значение Content-Length будет таким, каким его сделает программист в программе-клиенте. И при его ошибке может получиться несоответствие, так как может прийти данных условно на 2Гб а в контент ленгс будет просто левое значение, например 100)))
Когда хочешь передать в ToString параметр, его можно передать с помощью интерполяции через двоеточие, возьму твой пример: $"Загружено: {e.ProgressPercentage}% ({e.BytesReceived / 1048576:#.#} МБ)"
А чтобы progressbar плавнее работал, можно было установить его максимум на Content-Length, а в DownloadProgressChanged устанавливать его value на BytesReceived и он будет максимально плавно и красиво работать.
Можешь сделать видео урок как например парсить какую-то инфу с интернета? Пример: вставляешь ссылку на какой-то сайт, нажимаешь парсить и получаешь ту инфу, которая тебе нужна, но на примере c#
Приветствую! После просмотра урока у меня остались вопросы: 1. как прикрутить прогресс бар к внешнему процессу, например процессу, в котором происходит обработка списка элементов из базы данных, и как сделать так чтоб в этом процессе вызвался ProgressBar и без нажатия каких либо кнопок в форме (см. второй вопрос) по мере обработки элементов в прогрессбаре показывалось бы состояние обработки? (то есть ProgressBar.Value изменяется внешним процессом/потоком) 2. можно ли ProgressBar вызвать без создания формы? 3. если процессов (циклов в процессе) обработки несколько, как в форме изменять количество прогрессбаров и привязывать к разным циклам обработки? Вот пример кода основного процесса: namespace ConsoleApp1 { public class Counter { public static int Value = 0; static void Main(string[] args) { int max = 100; int value = 0; Task.Run(() => { Form1 form = new Form1(max); form.ShowDialog(); }); while (value < max) { value++; Value = value; Console.WriteLine(value.ToString()); Thread.Sleep(50); } } } } Вот код формы: namespace ConsoleApp1 { public partial class Form1 : Form { public Form1(int max) { InitializeComponent(); progressBar.Maximum = max; Thread thread = new Thread(Process); thread.Start(); } void Process() { if (InvokeRequired) { BeginInvoke((Action)Process); } else { while (progressBar.Value < Counter.Value) progressBar.Value = Counter.Value; } } } }
Привет Хачатур, как насчет того чтобы ты сделал видос, где ты от а до я создаешь какую то программу(от дизайна формы до публикации) это было бы интересно)
Привет, очень хочу узнать можно ли красиво менять версию запускаемого браузера WebBrowser? И можно ли в одном приложении запускать разные версии webBrowser В интернетах нашел только способ через ключ реестра FEATURE_BROWSER_EMULATION, но то не позволит мне запустить 2 браузера разных версий(ie7, ie11) в одном приложении
Я как то пытался встроить chromium в программу чтобы гугл карты нормально высвечивались, скачал библиотеку в итоге программа превратилась в кашу весом 300мб. Так что тоже интересно)
ты снял видео как скачать по ссылке файл, а можешь снять видео как наоборот отправить файл по ссылке или в Яндекс диск. " мне просто надо сделать так чтобы папка с работами на Яндекс диск отправлялись".
Как выставить timeout на определенное значение? Например, при LongPool сервере отправляя запрос, я получу ответ при новом действии. И действие при событии error; заданный timeout превышен.
А если надо выводить количество процентов в лейбле, а у нас Макс = 28 и value++; интуитивно понятно что 14 = 50%, как быть с остальными промежуточными значениями? Писать формулу на вывод? Я когда делал прогресс бар, у меня Макс всегда был 100. Допустим файлов 28. Значит double Qt = 100/28 = 3.57; //это величина за один шаг. Далее я после каждого вычисления наращивал Qt на эту величину и присваивал в ProgressBar.Value = (int)Qt; P.s. Потом до меня дошло что лучше делать как вы, а в лэйбл выводить конвертацию value значения в проценты: Label1.Text = "Загружено " + (100 / 28 * ProgressBar.Value) + "%";
есть пара вопросов не по теме 1 - есть разные числа double которые показываю в текстБоксе когда число 1.0386 (не с запятой а с точкой) то конвертирует в стринг и выдает в текстбоксе как 10386 (тоесть убирает точку) как мне правильно конвертировать в стринг? 2 - также у некоторых чисел после запятой могут быть 3 знака и может 8 тоесть 1.003 или 0.00030049 если при конвертации в стринг пишу аргумент число.ToString("F3 или F8") это не по феншую как определять сколько знаков после запятой (в принципе просто посчитать количестко символов) но как это записать в число.ToString(сюда) чтобы выдавало правильное количество знаков после запятой ? а ну и вместо запятой должна быть точка ссори за стресс ;)
@@XpucT C ReSharper надо разобраться в настройках чтобы получить перфоманс потому что он работает в процессе самой VS и для него там почти нет места. И даже на i5-том с 16 RAM лагает дико(((
Привет, спасибо огромное за уроки. Пишу свою первую курсовую на C#(Построение фракталов). Без Ваших видео-роликов было бы всё очень долго и нудно :) У меня вопрос- как привязать прогрессбар например к методу отрисовки Фрактального Дерева на пикчербоксе, программа постоянно дропается на первом шаге. Может кто знает?)
Здорово! Интересно, а есть видео как делается export из MySQL в excel таблицу. Там количество строк меняется и интересно процент загрузки как делается :)
Просил видео по http а оно оказывается есть))) Единственное я не разобрался, как сделать так чтобы после загрузки файла он не сохранялся автоматически на раб. стол, а вылетало диалоговое окошко "Сохранить как..."? UPD: Фух, просидел 2 часа и нашел таки рабочее решение, оставлю здесь может кому пригодится (можете сразу тестить грузит гугл картинку): 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.Net; namespace WForms1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void openFileDialog1_FileOk(object sender, CancelEventArgs e) { } private void button1_Click(object sender, EventArgs e) { var dialog = new SaveFileDialog(); dialog.Filter = "PNG (*.png)|*.png"; var result = dialog.ShowDialog(); //shows save file dialog if (result == DialogResult.OK) { var wClient = new WebClient(); wClient.DownloadFile("www.google.com/logos/doodles/2019/fall-2019-northern-hemisphere-4762325427945472-s.png", dialog.FileName); } } } }
Вопрос такой: ты говорил что непрямые ссылки по-другому работают. Я нашёл ссылку на видео в коде страницы, webclient её видит, ошибки нет, но загрузка не идёт. В чём может быть проблема?
Причин может быть масса: например, в том, что сервер, с которого Ты собираешься скачать, проверяет user-agent клиента. И если видит, что это не браузер, не даёт загрузить. Первое, что делаю лично Я в таких случаях ставлю ему user-agent Mozilla: stackoverflow.com/a/11841680
Хачатур, спасибо огромное! как обычно все доступно и просто. Подскажи пожалуйста, как при удалении n-количества файлов в папке ПРОПУСТИТЬ/НЕ ТРОГАТЬ те которые заняты каким-либо процессом? выдает ошибку ( System.IO.IOException: "Процесс не может получить доступ к файлу ).
1. От загружаемого файла просто берём имя без пути. То есть убираем / в адресе. 2. Потом из имени берём всё то, что идёт после последней точки - это будет расширением.
Всем привет! Я прошу прощения что не по теме. У меня в listBox принимаются значения с базы данных ( select ), и я бы хотел сделать поиск элемента в самом listBox - е, но не знаю как это нормально сделать. Буду очень благодарен если кто-то поможет:)
Не юзал базы данных с listBox, поэтому не уверен. Но я обычно делаю так когда нужно в листбоксе найти какой-нить элемент по стрингу: int objectIndex = listBox1.Items.IndexOf("Элемент который нужно найти"); string str = listBox1.Items[ObjectIndex].ToString();
@@adamiyy Спасибо большое за помощь:) но я уже вместо listBox поставил dataGridView. Там намного легче реализовать поиск и лучше отображает принятые с базы значения.
Добрую НОЧЬ). Вы не знаете как сделать типа аргументы запуска? Ну например - Когда наживаешь правой кнопкой мыши на ехе игры какой нибудь, выбираешь свойства, то там можно ввести аргумент например "-Level (Уровень, который будет загружаться при запуске))". Вот я тоже самое хочу сделать со своей программой. Не подскажите как? Хочу сделать аргумент developermode. Буду рад любой помощи)
Обязательно про это будет видео, но если коротко, то: string[] keys = Environment.GetCommandLineArgs(); foreach (string key in keys) if (key.Contains("аргумиент")) ...
@@XpucT Я бы ещё рекомендовал бы уже начать делать уроки по WPF. WinForms устарел уже, WPF технологичней и мощней +Можно легко, быстро и красиво сделать дизайн. Многие уже перестали писать фрейморки, библиотеки под WinForms, перешли на WPF. По UWP, он ещё сырой, но это почти тот же WPF. Не заставляю, но хотелось бы в будущем) Об достоинствах WPF над WinForms можно почитать в Вики например.
@@Атчачат О, про WPF не просто знаю, но и пишу. Но когда пришёл к MVVM понял, что перед тем, как делать туториалы на эту тему, нужно очень хорошо подумать, как эту паутину объяснить. Всё то, что сейчас объясняется в сети - говно полное. Поэтому пока не делаю. Нужно составить снова свою последовательность.
Здравствуйте, подскажите пожалуйста как привязать прогрессбар к запуску программы через сетевой ресурс (локальная сеть) или программы находящейся на пк с отображением загрузки в прогрессбар. Заранее спасибо.
Привет 🖐 Простой pause не существует. Нужна своя реализация. Готовых полно. Вот некоторые из них: stackoverflow.com/questions/15995705/adding-pause-and-continue-ability-in-my-downloader#:~:text=unfortunately%20WebClient%20has%20no%20ways,getting%20response%20stream%20with%20flag.
А будут видео по БД MSSql Server? Интересно будет послушать как работать с хранимыми процедурами, добавление, удаления, редактирование. Как эту лубуду написать максимально коротко и понятно.
Хотелось бы еще узнать как вместо IE-браузера в приложении использовать Chromium или что-то, что будет показывать веб-страницы нормально (некоторые js-скрипты выполняются некорректно и сайты предупреждают об этом). Спасибо!
Подскажите, а можно ли при помощи WebClient докачивать файлы? Допустим начал скачивание файла, а потом завершил программу и при новом запуске программы заставить докачать файл с той точки где он остановил скачивание
Хачатур, доброй ночи) Подскажи пожалуйста а как можно реализовать прогресс бар на время ответа от сервера?То есть я отправляю POST запрос на сервер и у меня пока не истек тайм-аут ответа от сервера,увеличивается прогресс бар.Как только сервер ответил,прогресс бар заполнился.И при следующем запросе сбрасывался и начинал снова считать время ответа от сервера.И т.д
Всем привет подскажите пожалуйста как реализовать следующие В видео показанно как скачивает виртуал бок и выводят в лейбл и прогресс бар . Но у меня возник вопрос. К примеру я создал класс update в него заехал код скачивания. Но прогресс бар и лэйбал находятся на форуме к примеру FormUpdate как мне передать данные скачки из класса на форму.
Привет 🖐 Написал две программы для Тебя. Наглядные примеры с делегатом и с полем. www.upload.ee/files/12007401/Class_to_Form.rar.html Также стоит ознакомиться с этой страницей для общего ознакомления: www.cyberforum.ru/windows-forms/thread110436.html
@@XpucT спасибо огромное. Буду скоро дома гляну. А еще вопрос. Как определить что поток закончил работу и оповестить что программа закончила скачивание. И как можно реализовать установку аватара. То есть пользователь установил фото и оно сохранилось в программе. Я знаю можно картинку переводить в байты и назад. Но чет второй день не могу реализовать это
// Как оповестить, что программа закончила скачивание: bool downloading = true; async void button1_Click(object sender, EventArgs e) { SomeTask(); while (downloading) await Task.Delay(1000); // Тут оповещаем о том, что скачивание завершено // Программа не доберётся до сюда пока downloading = true } async void SomeTask() { await Task.Run(() => { // Здесь выполняется скачивание, в конце которого делаем working = false // код // код // код // код downloading = false; }); } // Касаемо аватара // Как в pictureBox воткнуть изображение с компа: pictureBox1.Image = Image.FromFile(@"С:\Morozko\Picture.jpg"); // Как в pictureBox воткнуть аватар из онлайна: using (Stream wat = WebRequest.Create("ссылка/На/Картинку.jpg").GetResponse().GetResponseStream()) AttachScreen.BackgroundImage = Bitmap.FromStream(wat);
Здраствуйте, у меня тут проблема. У меня типа Iso Downloader, а это значит что файлы большие будут качаться, и как бы я код написал, нету ошибок и даже предупреждений. И когда образ качаеться, то когда доходит до 19 кб, всё, перестаёт качаться. Буду рад любой помощи.
@@XpucT Образы залиты на Яндекс Диск. Если просто Web Client, без всяких прогресс баров, скоростей загрузки и размера, то качаеться нормально. Чуствую придёться пересмотреть видео) Спасибо за помощь.
Парсить оба потока в отдельную переменную и уже её выводить на экран. То есть каждый поток накручивает не интерфейс, а переменную, которая крутится в интерфейсе.
Визуально мы тут почти ничего хитрого не делаем, поэтому в качестве домашнего задания можно просто потренировать навыки написания событий и обработчиков для загрузки. В следующем видео, как раз упоминается домашка по этой теме 👍
А как через переменные среды найти папк "Загрузки"? Сейчас я через реестр ее нахожу, где бы она ни была, а иначе можно? downloadFolder = Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "{374DE290-123F-4565-9164-39C4925E467B}", @"D:\Downloads").ToString();
Добрый вечер! В видео Уроки C# - ProgressBar + WebClient, HttpWebRequest, WebResponse - C# - в видео время 18:19 вы использовали сочетание клавиш для перехода вверх по строке, вы не вырезали и не вставляли, не могли бы вы сказать мне, какие сочетания клавиш вы использовали. Если что-то пропустили или не поняли, пишу на английском, пользуюсь переводчиком с португальского на русский.