前段时间迷上了各直播平台的小姐姐,在做虎牙直播采集的时候,希望点击一个项目后可以预览小姐姐的直播间图片。图片的下载是一个相对比较消耗耗时间的过程,点击界面的过程产生了严重的卡顿,即它阻塞了UI主线程。有必要使用多线程来处理。
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处理。
同样的这次也把这个方法用在黑鸟播放器的列表的载入中,实现了边加载边操作,效果很棒。
Thread t1不释放吗?
会不会内存泄漏?
有点炸,当时只想着实现功能就可以,还真没管释放资源的问题,不频繁大量操作,问题不大。
多线程还是有点搞不懂,现在就多看看源码学习一下
黑鸟大神,战旗和企鹅电竞失效了
战旗的我知道,下个版本会更新修复。