并行编程:无法并行访问UI?我正在尝试在wpfc#中创建一个函数的并行执行,它也在UI上运行操作。但是在运行时,UI控件上的方法总是有一个例外:调用线程无法访问该对象,因为另一个线程拥有它。异常总是在正在运行的循环的第二个实例上调用,所以没有办法在两个并行运行的实例中操作UI?是否可以并行访问UI?代码:do{if(listBox_Copy.SelectedIndex{play(playcues,newRoutedEventArgs());});}然后它在播放函数中崩溃privatevoidplay(objectsender,System.Windows.RoutedEventArgse){Griditemgrid=VisualTreeHelperExtensions.FindAncestor(播放提示);无法从后台线程访问UI,所有更新都必须在主线程上您可以使用Dispatcher来执行此操作,例如Actionx=(Action)delegate{//domyUIupdating};Dispatcher.Invoke(x,newobject[]{});诀窍是使用IProgress从主线程报告更新。IProgress构造函数接受将在主线程中运行的匿名函数,从而允许更新UI。引自https://blog.stephencleary.com/2012/02/reporting-progress-from-async-tasks.html:publicasyncvoidStartProcessingButton_Click(objectsender,EventArgse){//Progress构造函数捕获我们的UI上下文,//因此lambda将在UI线程上运行。varprogress=newProgress(percent=>{textBox1.Text=percent+"%";});//DoProcessing在线程池上运行。awaitTask.Run(()=>DoProcessing(progress));textBox1.Text="完成!";}publicvoidDoProcessing(IProgressprogress){for(inti=0;i!=100;++i){Thread.Sleep(100);//CPU绑定工作if(progress!=null)progress.Report(i);现在,有点自我推销:)我创建了一个IEnumerable扩展来运行可以直接修改UI的并行事件回调。您可以在这里查看:https://github.com/jotaelesalinas/csharp-forallp希望对您有所帮助!以上是C#学习教程:Parallelprogramming:Can'taccessUIparallelism?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: