3月13日 datagridview表格图片加载

Profile Picture
- Published on Mar 13, 2020🌏 Public

多个子线程同时执行下载

   public void SearchStory(string keyword)
        {
            stories = Program.Provider.Search(keyword);
            datagridview_stories.DataSource = stories;



            for (int i = 0; i < stories.Count; i++)
            {
                var z = i;
               
                Task.Run(() =>
                {
                        Image img = DataProvider.GetImage(stories[z].ImgSrc);
                        if (img != null)
                        {
                            datagridview_stories["图片", z].Value = img;
                        }
                });
            }


            //for (int i = 0; i < stories.Count; i++)
            //{
            //    Thread thread = new Thread((obj) =>
            //    {
            //        Thread.Sleep(50);
            //        var z = (int)obj;
            //        Image img = DataProvider.GetImage(stories[z].ImgSrc);
            //        if (img != null)
            //        {
            //            datagridview_stories["图片", z].Value = img;
            //        }
            //    });
            //    thread.Start(i);
            //}

        }

WebClient的异步下载

        public void SearchStory(string keyword)
        {
            stories = Program.Provider.Search(keyword);
            datagridview_stories.DataSource = stories;
            for (int i = 0; i < stories.Count; i++)
            {
                WebClient wc = new WebClient();
                wc.DownloadDataCompleted += (sender, userToken) =>
                {
                    try
                    {
                        var rowIndex = (int)userToken.UserState; //调用DownloadDataAsync时,第二个参数传入的数据
                        datagridview_stories["图片", rowIndex].Value = userToken.Result;// 下载的结果
                        }
                    catch (Exception)
                    {

                    }
                };
                wc.DownloadDataAsync(new Uri(stories[i].ImgSrc), i);
            }
        }