- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有关我的伪解决方案,请参阅帖子底部。
我再一次完全和完全地坚持这一点。我花了好几个小时试图理解——是的,我可以让一个 collectionviewsource 完美地工作,而无需在后面的代码上进行线程处理。
想象一下,当我发现仅在页面上添加两个 collectionviewsource 会导致线程问题时,我会感到震惊。昨晚我花了几个小时阅读 C#5 中的 Async 和 MSDN 的东西,但是我今天开始工作,但我不知道如何实现这一点。
下面的代码是我在哀求帮助之前所做的最后一次尝试,因为我可能已经花费了太多的工作时间来试图理解如何做到这一点。我知道我需要一个 collectionviewsource 在开始另一个之前完成,所以我尝试了 Await Task.ContinueWith 等来尝试一个接一个地链接。
正确排列线程中的两组任务似乎非常棘手,或者我仍然误解了一些基本的东西。
如果有人能建议他们如何在 WPF UI 上异步填充一些控件,我将不胜感激。
该应用程序本身是一个一次性应用程序,链接到一个 Access 数据库,我正在使用该数据库来尝试在线程方面变得足够流利,以便在我们适当的代码库中实现它。我离那个很远!
更新了更完整的代码示例并根据答案进行了调整:
Private Async Sub MainWindowLoaded(sender As Object, e As RoutedEventArgs) Handles MyBase.Loaded
InitializeComponent()
Dim personSetViewSource As System.Windows.Data.CollectionViewSource = CType(Me.FindResource("personSetViewSource"), System.Windows.Data.CollectionViewSource)
Dim contactSetViewSource As System.Windows.Data.CollectionViewSource = CType(Me.FindResource("contactSetViewSource"), System.Windows.Data.CollectionViewSource)
Dim personList = Await Task.Run(Function() personSet.personList)
personSetViewSource.Source = personList
Dim contactList = Await Task.Run(Function() contactSet.contactList)
contactSetViewSource.Source = contactList
End Sub`
public class ObservableCollectionEx<T> : ObservableCollection<T>
{
public override event NotifyCollectionChangedEventHandler CollectionChanged;
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
using (BlockReentrancy())
{
NotifyCollectionChangedEventHandler collectionChanged = this.CollectionChanged;
if (collectionChanged != null)
foreach (NotifyCollectionChangedEventHandler nh in collectionChanged.GetInvocationList())
{
DispatcherObject dispObj = nh.Target as DispatcherObject;
if (dispObj != null)
{
Dispatcher dispatcher = dispObj.Dispatcher;
if (dispatcher != null && !dispatcher.CheckAccess())
{
NotifyCollectionChangedEventHandler nh1 = nh;
dispatcher.BeginInvoke(
(Action) (() => nh1.Invoke(this,
new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Reset))),
DispatcherPriority.DataBind);
continue;
}
}
nh.Invoke(this, e);
}
}
}
}
Dim CarePlanList = Task.Run(Function() CarePlanSet.CarePlanList)
Dim rcpdList = Task.Run(Function() rcpdSet.rcpdList)
Dim tasks() As Task = {CarePlanList, rcpdList}
Dim t = New TaskFactory
Await t.ContinueWhenAll(tasks, Sub()
carePlanSetViewSource.Source = CarePlanList
rcpdSetViewSource.Source = rcpdList
End Sub)
Dim personList = Task(Of List(Of person)).Run(Function() personSet.personList)
Dim contactList = Task(Of ObservableCollectionEx(Of contact)).Run(Function() contactSet.contactList)
contactSetViewSource.Source = contactList.Result
If contactList.IsCompleted Then personSetViewSource.Source = personList.Result
最佳答案
您的两个代码示例都存在立即跳出的问题。
首先你在等待task1
,我假设后面有更多代码,但所有 task1
正在做的是启动基本上是火灾并忘记操作回到 UI 线程 (Dispatcher.BeginInvoke
),因此不会真正产生任何异步等待。
其次,主要问题似乎是您正在对 Task
进行大量设置。实例并用延续链接它们,但从不启动 action2 Task
,这似乎是整个链的根,因此根本没有事件。这类似于您使用 BackgroundWorker
获得的结果。从来没有RunWorkerAsync
叫。
为了让它正常工作并避免让你头晕目眩,我建议首先编写整个 block 而不进行任何异步并验证所有内容是否按预期加载,但要避免 UI 锁定。 Async/Await 旨在以最小的结构更改添加到类似的代码中。使用 Task.Run
与 async 和 await 一起,您可以使代码异步。
这是基本模式的一些伪代码,没有异步启动:
PersonSetList = LoadData1()
CVS1.Source = PersonSetList
ContactList = LoadData2()
CVS2.Source = ContactList
PersonSetList = await Task.Run(LoadData1())
CVS1.Source = PersonSetList
ContactList = await Task.Run(LoadData2())
CVS2.Source = ContactList
关于带有 UI 线程问题的 WPF - TaskFactory、CollectionView 问题 - 语法噩梦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14379158/
我知道这个问题已经被问过了,但我没有找到任何方法来阅读现有代码来找到解决我的问题的方法。我的一些应用程序用户对不同类型的 UnsatifiedLinkError 有经验: Caused by: jav
好的,我完成了。我不明白为什么会出现此错误: rake features 这不可能是我无法连接到 mysql 原因: rake db:migrate 完美运行。 我一直有这个错误: rake feat
我有一个容器 DIV position:relative。容纳一切然后一左一栏,一右一栏,经典布局。它们都绝对定位在这个相对#Main 中。我希望权利是流动的,所以我说 top: 0px;左:280p
嗨,你猜怎么着,我有一个 IE 定位问题!这是在 8 中,所以天知道其他版本中发生了什么(稍后检查) 两个盒子都调用同一个类,为什么IE这么难? 这是它的外观: 这是它的样子: CSS:(为了便于阅读
我无法理解正则表达式,感谢任何帮助! 我有很多字符串数据,可能包含也可能不包含字符串“1/10”或“2/10”或“2/18”等。基本上,分子和分母都可以变化。让事情变得更复杂的是,一些数据输入运算符(
我正在使用 Ooura 的 FFT 分析一些白噪声(持续时间为 75368 smp,有 44100 个噪声样本)。我得到的结果很奇怪:即使除以样本数,我的结果也小于 1.0,这是怎么回事? 我正在
前一周我一直在尝试让 WCF 的安全形式在 Azure 上运行,但一切都无济于事!我的用例非常简单。我想调用云中的 WCF 端点并传递消息以排队等待辅助角色。除此之外,我想限制对预先授权的用户的访问,
我正在尝试实现 Twitter 的自定义登录 View (我不想要那个 UIWebView)。我已经下载了很多类(class),但到目前为止我对此感到噩梦。现在我正在尝试让 Twitter + oAu
很高兴找到这样一个有用的网站,里面有天才成员(member)。一段时间以来,我一直在尝试寻找解决此 SQLITE 问题的方法。谷歌没有帮助我,除了找到这个网站。 SQL 查询在同一数据库的 MSAcc
我有一个基于 Spring Framework 的应用程序,我们之前已成功部署它并正在添加新功能。我们的开发机器是 JDK6 和 Tomcat7。我们正在使用 Spring 3.1.0.M2。旧代码使
各位业内资深人士, 我是一名大三学生,开始了我的第一个暑期编程实习,而且我已经不知所措了。我工作的公司从另一家公司购买了一个巨大的应用程序,该公司自 90 年代初以来一直在缓慢地扩展和修改它。该解决方
我知道你在想什么,另一个 netbeans xdebug 帖子? 好吧,我已经尝试了我在其他帖子中看到的所有内容,但似乎没有任何效果。这是我的设置: 操作系统:Ubuntu 9.10 PHP:5.2.
好的,所以我尝试在该程序的对话中实现一个计时器,该计时器在进入下一个对话之前暂停一秒钟。当我尝试这个时,java会抛出很多错误,例如:非法的表达式开始,;预期,.class 预期,并在解析时到达文件末
我在使用 Spring Jdbc 从数据库检索数据时遇到问题。这是我的问题: 我的 DAO 上有一个 getData() 方法,该方法应该从某些 select 语句的结果中返回一行。再次调用时,get
我的主类是一个包含图形组件的窗口,其中包括 JTable。 我创建了一个公共(public)类ContextMenu,它是JPopupMenu的自定义实现,并包含多个JMenuItem。 我已在 JT
The best way to illustrate this question is with...a Fiddle! 在您访问 fiddle 之前,请注意最灰色的元素后面有文本,该文本位于具有边框
我似乎无法处理收到的 CSV。这是银行生成的文件,看起来像这样: "000,""PLN"",""XYZ"",""2011-08-31"",""2011-08-31"",""0,00""" 1,""E"
一次提交 2447 个文件时,我完全陷入了 SVN 错误。我在 Windows 7 64 位上使用 TortoiseSVN(最新版本)。 事实是,一些文件是在 Mac 上创建的,而另一些文件是在 PC
我将从我要完成的事情开始。 我有一个 ListFragment,与 LoaderCallbacks 关联以从数据库检索数据。使用 AsyncTask 下载数据,并插入到数据库中。当用户到达列表底部时,
当我在探查器中运行以下代码时,我得到一个 char[] 和 byte[],它们会不断累积,直到程序因 Java 堆内存不足异常而崩溃。有人能告诉我为什么吗?也许我在做一些根本性的错误。 package
我是一名优秀的程序员,十分优秀!