当前位置: 首页 > 编程语言 > C#

如何改变backgroundworker中的ListView?跨线程共享报错

时间:2023-04-10 19:15:49 C#

如何在backgroundworker中更改ListView?跨线程错误可能重复:避免跨线程操作错误的最干净和正确的方法?我在运行程序时遇到错误....{“无效的跨线程操作:从创建它的线程以外的线程访问控件'listView1'。”}privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){TestObjectargumentTest=e.ArgumentasTestObject;string[]lines=argumentTest.ThreeValue.Split(newstring[]{Environment.NewLine},StringSplitOptions.None);HtmlAgilityPack.HtmlDocument文档=newHtmlAgilityPack.HtmlDocument();foreach(stringvrinlines){stringcountry=argumentTest.OneValue.Trim();stringurl=vr+country+'/code/'+argumentTest.TwoValue.Trim();stringsourceCode=WorkerClass.getSourceCode(url);文档.LoadHtml(源代码);vartitle=document.DocumentNode.SelectSingleNode("//标题");vardesc=document.DocumentNode.SelectSingleNode("//div[@class='productDescription']");//--eksekusi标题字符串isititle=title.InnerText;stringisititle2=isititle.Replace("droidflashgame:","");stringisititle3=Regex.Replace(isititle2,"[^A-Za-z0-9]+","");stringisititle4=isititle3.Substring(0,Math.Min(isititle3.Length,120));//--添加到下一步的列表视图...ListViewItemabg=newListViewItem(isititle3);abg.SubItems.Add(isititle4);listView1.Items.Add(abg);//这里有错误?我知道在一些教程中说使用调用?但是我试了很多还是错了?任何手?尝试这个这对我来说很好ListViewItemabg=newListViewItem(isititle3);如果(listView1.InvokeRequired)listView1.Invoke(newMethodInvoker(delegate{listView1.Items.Add(abg);}));否则listView1.Items.Add(abg);从您的代码中删除最后一行(listView1.Items.Add(abg);//这里错了吗?)并将其替换为:AddListViewItem(abg);然后用你的代码这个方法:delegatevoidAddListViewItemDelegate(ListViewItemabg);voidAddListViewItem(ListViewItemabg){if(this.InvokeRequired){AddListViewItemDelegatedel=newAddListViewItemDelegate(AddListViewItem);this.Invoke(del,newobject(){abg});}else{listView1.Add(abg);这将完成工作,快乐的编码!当你使用backgroundworker的时候,你只是通过改变的progress来传递item:以上是C#学习教程:如何在backgroundworker中改变ListView?如果跨线程错误分享的全部内容对你有用,需要进一步了解C#学习教程,希望你多多关注——privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){//.......vartest=newListViewItem("test");背景工人1.报告进度(0,测试);}privatevoidbackgroundWorker1_ProgressChanged(objectsender,ProgressChangedEventArgse){listView1.Items.Add((ListViewItem)e.UserState);}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: