首页 > 其他分享 >异步多线程解决界面卡顿问题

异步多线程解决界面卡顿问题

时间:2022-10-31 16:55:59浏览次数:40  
标签:异步 Text private textBox1 html 卡顿 webClient 多线程 WebClient

异步多线程解决界面卡顿问题

 

 点击button下载一个网页,并将网页的长度显示在textbox中。

注意是将网页的长度显示在textbox中,而不是将下载的网页字符显示在textbox中,因为太大的字符串在textbox上显示本身就会卡界面。

using System;
using System.Net;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //private void button1_Click(object sender, EventArgs e)
        //{
        //    textBox1.Text = "";//每次点击按钮清空
        //    //第一个例子,卡界面
        //    WebClient webClient = new WebClient();
        //    string html = webClient.DownloadString("https://www.163.com");
        //    this.textBox1.Text = html.Length.ToString();
        //}

        //private void button1_Click(object sender, EventArgs e)
        //{
        //    textBox1.Text = "";//每次点击按钮清空
        //    //第二个例子,通过多线程解决不卡界面
        //    WebClient webClient = new WebClient();
        //    Task.Run(() =>
        //    {
        //        string html = webClient.DownloadString("https://www.163.com");
        //        this.Invoke(new Action(() =>
        //        {
        //            this.textBox1.Text = html.Length.ToString();
        //        }));
        //    });
        //}

        //private async void button1_Click(object sender, EventArgs e)
        //{
        //    textBox1.Text = "";//每次点击按钮清空
        //    //第三个例子,使用HttpClient的异步多线程,不卡界面
        //    HttpClient Client = new HttpClient();
        //    string html = await Client.GetStringAsync("https://www.163.com");
        //    this.textBox1.Text = html.Length.ToString();
        //}

        //private async void button1_Click(object sender, EventArgs e)
        //{
        //    textBox1.Text = "";//每次点击按钮清空
        //    //第四个例子,将WebClient改造成异步,实现不卡界面
        //    WebClient webClient = new WebClient();
        //    string html = await Task.Run(() =>
        //    {
        //        return webClient.DownloadString("https://www.163.com");               
        //    });
        //    this.textBox1.Text = html.Length.ToString();
        //}

        //private async void button1_Click(object sender, EventArgs e)
        //{
        //    textBox1.Text = "";//每次点击按钮清空
        //    //第四个例子的变形,写一个WebClient的异步方法,实现不卡界面
        //    string html = await getDownloadAsync("https://www.163.com");
        //    this.textBox1.Text = html.Length.ToString();
        //}

        //private Task<string> getDownloadAsync(string url)
        //{
        //    WebClient webClient = new WebClient();
        //    return Task.Run(() =>
        //    {
        //        return webClient.DownloadString(url);
        //    });
        //}

        private async void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";//每次点击按钮清空
            //第四个例子的变形,写一个WebClient的异步方法,实现不卡界面
            Task<string> t = getDownloadAsync("https://www.163.com");
            string html = await t;
            this.textBox1.Text = html.Length.ToString();
        }

        private Task<string> getDownloadAsync(string url)
        {
            WebClient webClient = new WebClient();
            return Task.Run(() =>
            {
                return webClient.DownloadString(url);
            });
        }
    }
}

 

标签:异步,Text,private,textBox1,html,卡顿,webClient,多线程,WebClient
From: https://www.cnblogs.com/hanzq/p/16844913.html

相关文章

  • Java多线程Thread详细讲解(万字教程)
    一、线程的基本概念线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它......
  • 浅谈Java多线程之FutureTask
    Runnable和Callable是多线程中的两个任务接口,实现接口的类将拥有多线程的功能,FutureTask类与这两个类是息息相关!FutureTask继承体系看下这张图,原来FutureTask类实现了Runnab......
  • js异步编程的三种模式
    写在前面javascript语言的执行环境是"单线程"(singlethread),就是指一次只能完成一件任务。如果有多个任务,就必须排队,等前面一个任务完成,再执行后面一个任务,以此类推。......
  • Java多线程(6):锁与AQS(下)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 之前说过,AQS(抽象队列同步器)是Java锁机制的底层实现。既然它这么优秀,是骡子是马,就拉出来溜溜吧。首先用重入锁来实现简......
  • 关于罗技鼠标在m1 mac上卡顿,飘逸的问题
    最近发现公司发的罗技鼠标出现卡顿,漂移的现象,就是滑动的时候,鼠标突然卡了一样,然后出现在另一个地方。以为是鼠标坏了,又买了个新的M720。连接蓝牙的话,不丝滑;优联连接的话......
  • java多线程-线程安全集合
    CopyOnWriteArrayListCopyOnWrite思想就是将原来的数据copy一份出来修改,然后把修改后的数据替换原来的数据。在setArray之前并发读到的还是旧数据,弱一致性。publi......
  • Linux--多线程(二)
    线程的同步和互斥基本概念概述:现在操作系统基本都是多任务的操作系统,同时有大量可以调度的实体在运行。在多任务操作系统当中,同时运行的多个任务可能:都需要访问/使用同......
  • Java多线程(6):锁与AQS(中)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ Java中的AQS(AbstractQueuedSynchronizer,抽象队列同步器)是用来实现锁及其他同步功能组件的Java底层技术基础,java.util.co......
  • Linux--多线程(一)
    线程线程的概念线程:线程是OS能够进行运算调度的基本单位。线程是一个进程中的一个单一执行流,通俗地说,一个程序里的一个执行路线就叫做线程。可以知道的是,一个进程至少......
  • 2021-02-02 winform 定时器加异步 Task任务执行异步方法。
     定时器加Task任务,执行异步方法。privatevoidtimer1_test_Tick(objectsender,EventArgse){ss(DateTime.Now.Second);}Taskq......