.NET 4.x WebClient.DownloadDataAsync блокирует вызывающий поток - C#

Узнай цену своей работы

Формулировка задачи:

есть код
private void CheckForUpdate()
        {
            using (WebClient client = new WebClient())
            {
                client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(client_DownloadDataCompleted);
                try
                {
                    client.DownloadDataAsync(new Uri("http://infinum.orgfree.com/_Update/APKToolGUI/version.txt"));
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
на этой строке client.DownloadDataAsync(new Uri("http://infinum.orgfree.com/_Update/APKToolGUI/version.txt")); программа подвисает на несколько секунд (2-4), хотя по идее не должна. я бы не назвал это блокировкой вызывающего потока, но как это назвать правильно хз. что с моим кодом не так?

Решение задачи: «.NET 4.x WebClient.DownloadDataAsync блокирует вызывающий поток»

textual
Листинг программы
private BackgroundWorker getVersion;
 
        private void InitializeGetVersion()
        {
            getVersion = new BackgroundWorker();
            getVersion.DoWork += new DoWorkEventHandler(getVersion_DoWork);
            getVersion.RunWorkerCompleted += new RunWorkerCompletedEventHandler(getVersion_RunWorkerCompleted);
        }
 
        private void getVersion_DoWork(object sender, DoWorkEventArgs e)
        {
            using (WebClient webClient = new WebClient())
            {
                try
                {
                    String actualVersionString = webClient.DownloadString("http://infinum.orgfree.com/_Update/APKToolGUI/version.txt");
                    Version latestVersion;
                    if (Version.TryParse(actualVersionString, out latestVersion))
                    {
                        e.Result = latestVersion;
                    }
                }
                catch (Exception exc)
                {
                    MessageBox.Show(exc.Message, Application.ProductName);
                }
            }
        }
 
        private void getVersion_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Result != null)
            {
                Version latestVersion = (Version)e.Result;
                MessageBox.Show("Latest version: " + latestVersion.ToString(), Application.ProductName);
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //DownloadFile();
            if (!getVersion.IsBusy)
                getVersion.RunWorkerAsync();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы