Не удается обновить текстовое поле с помощью DownloadProgressChangedEventHandler - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь загрузить файл с URL-адреса, используя WebClient и многопоточность. Я пытаюсь получить ProgressPercentage при загрузке файла, и я пытаюсь сделать это с помощью DownloadProgressChanged, но когда я пытаюсь вывести процент с помощью debug.WriteLine, все в порядке. Но когда я хочу изменить свой textbox.text, он не работает. Я хочу обновить текстовое поле во время загрузки.

С этим я вызываю функцию. wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChangedEventHandler);

Это содержание функции:

 public void DownloadProgressChangedEventHandler(object sender, DownloadProgressChangedEventArgs e)
    {
        //Debug.WriteLine works normal.
        Debug.WriteLine(e.ProgressPercentage);
        TextBox1.Text = "Progress:" +e.ProgressPercentage.ToString();
        progressBarDownload3.Style.Add("width",e.ProgressPercentage.ToString()+"%");
    }

1 Ответ

1 голос
/ 05 мая 2020

Технически, хотя приведенное выше решение может быть полезно, если вы работаете над настольным или мобильным приложением, но если вы используете ASP. NET Серверный компонент, и ваш сервер что-то загружает для вас, пока страница отправляется обратно, то нет возможности обновить интерфейс до того, как загрузка будет завершена и ответ будет отправлен обратно запрашивающему клиенту. В этом вся суть, каждый запрос, который идет на сервер, будет возвращаться только после того, как ответ будет завершен / прерван, он не может вернуться, просто чтобы сообщить о прогрессе, а затем go назад к точке, где он был запущен.

Если вы хотите отображать ход загрузки файла, вам следует go для решений на стороне клиента (JavaScript/jQuery).

Если вы строго хотите загрузить файл с кодом C#, затем попробуйте проверить библиотеку SignalR, это может быть полезно для вас в сообщении об изменениях в бэкэнде во внешний интерфейс, но в то же время было бы сложно управлять просто сообщать о ходе загрузки.

В качестве альтернативы, вы можете переключить браузер на URL-адрес загрузки, и он автоматически загрузит файл для клиента, и индикатор выполнения загрузки браузера по умолчанию будет виден клиентам, загружающим файл.

Несмотря ни на что, вы не можете скачивать файлы с сервера и сообщать о каждом * 101 2 *, который загружается во внешний интерфейс с использованием C# и ASP. NET WebForms / MVC. Если вы не включили в действие jquery / javascript.

...