C#多线程载入网络图片

前段时间迷上了各直播平台的小姐姐,在做虎牙直播采集的时候,希望点击一个项目后可以预览小姐姐的直播间图片。图片的下载是一个相对比较消耗耗时间的过程,点击界面的过程产生了严重的卡顿,即它阻塞了UI主线程。有必要使用多线程来处理。

《C#多线程载入网络图片》
核心代码:

        private void listView11_SelectedIndexChanged(object sender, EventArgs e)//选中,显示缩略图事件
        {
                Thread t1 = new Thread(new ThreadStart(ShowPictureYinYueTai));  //
                t1.Start();               
            }
        }
       private void ShowPictureYinYueTai()
        {
            try
            {
                string strIMG ="";
                Invoke(new MethodInvoker(() =>
                {
                    strIMG = listView11.SelectedItems[0].SubItems[15].Text.Trim();//取得图片地址
                }));
                Image O_Image = Image.FromStream(WebRequest.Create(strIMG).GetResponse().GetResponseStream()); //
                Invoke(new MethodInvoker(() =>
                {
                    pictureBox11.Image = O_Image;//主线程显示图片
                }));
            }
            catch { 
                //异常处理
            }
        }

之前由于对这个理解的不透彻,整个ShowPictureYinYueTai()函数都用Invoke包起来,这样其实跟没有开多线程是一样的,只有需要更新UI线程上的控件的时候才使用委托Invoke处理。
同样的这次也把这个方法用在黑鸟播放器的列表的载入中,实现了边加载边操作,效果很棒。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

  1. wdongyao 说道:

    Thread t1不释放吗?
    会不会内存泄漏? :034:

    1. 黑鸟 说道:

      有点炸,当时只想着实现功能就可以,还真没管释放资源的问题,不频繁大量操作,问题不大。 :008:

  2. 一天天世界 说道:

    多线程还是有点搞不懂,现在就多看看源码学习一下

  3. RideWen 说道:

    黑鸟大神,战旗和企鹅电竞失效了

    1. 黑鸟 说道:

      战旗的我知道,下个版本会更新修复。