22得票2回答
理解WPF Dispatcher.BeginInvoke

我原本以为dispatcher会按照操作的优先级依次执行队列中的操作,根据优先级或添加到队列中的顺序(如果优先级相同)执行操作,直到有人告诉我这在WPF UI dispatcher中并非如此。 我被告知,如果UI线程上的操作需要更长时间(比如数据库读取),UI dispatcher会简单地尝...

21得票4回答
必须在与 DependencyObject 相同的线程上创建 DependencySource。

我将可观察的字典从视图模型绑定到视图。我使用 Caliburn Micro 框架。 视图: <ListBox Name="Friends" SelectedIndex="{Binding Path=SelectedFriendsIndex,Mode=T...

20得票6回答
如何为 Dispatcher 获取一个 TaskScheduler?

我的应用程序有多个 Dispatcher (又称GUI线程,消息泵),以确保GUI的某个缓慢、无响应的部分不会对整个应用程序产生太大影响。我还经常使用 Task 。 目前,我有一些代码条件性地在 TaskScheduler 或 Dispatcher 上运行 Action ,然后直接返回一个 ...

20得票1回答
理解调度队列

我认为我需要一些帮助来理解调度队列。 当新任务到达时,它会被添加到调度队列的开头,当Dispatcher想要处理一个工作项时,它会从开头被移除。 更一般地说:如果有工作,则以FIFO方式将其存储在队列中,并在没有剩余工作时进行处理。 MSDN文档这里提到了一个循环和一个帧: Dispa...

19得票9回答
任务队列与作业亲和性

我目前面临一个问题,我相信这个问题有一个官方名称,但我不知道该在网上搜索什么。如果我描述了这个问题和我所想的解决方案,希望有人能告诉我设计模式的名称(如果有与我所要描述的相匹配的)。 基本上,我想要的是一个作业队列:我有多个客户端创建作业(发布者),以及处理这些作业的工作者(消费者)。现在我...

19得票3回答
WPF调度程序是解决多线程问题的方案吗?

我对在我的代码中使用锁定操作有一种不好的感觉,但现在WindowBase的Dispatcher存在了,我想在任何地方都使用它。 例如,我使用一个多线程单例WCF服务,在PRISM的EventAggregator上发布事件,有效负载是不可变的(只是数据),每个具有Dispatcher的线程都可...

19得票4回答
延迟调度调用?

在WPF中,由于界面更新的复杂性,有时我需要在短暂的延迟后执行操作。 目前,我只是这样做: var dt = new DispatcherTimer(DispatcherPriority.Send); dt.Tick += (s, e) => ...

18得票5回答
WPF Dispatcher.BeginInvoke和UI/后台线程

我认为我需要对WPF的Dispatcher.Invoke和Dispatcher.BeginInvoke的使用进行一些澄清。 假设我有一些长时间运行的“工作”代码,例如在简单的WPF应用程序中按下按钮时调用的代码:longWorkTextBox.Text = "Ready For Work!"...

18得票3回答
在类库中获取UI调度程序

我想设计一个类库,并计划使用多线程(即 BackgroundWorker)。如果我打算将这些字段绑定到消费前端的库的GUI,那么我必须注意线程上下文,从中更新这些字段。根据我所读的,将GUI调度程序的引用传递给库不是一个好主意。但是我如何获得将使用该库的应用程序的调度程序?这是可能的吗? 我...

17得票1回答
WPF应用程序在调用Dispatcher时出现死锁

我们偶尔遇到一个情况,应用程序被死锁了,调度程序与后台线程似乎被死锁在一起。我并没有看到任何线程有任何被锁定的共享资源。后台线程遇到了异常,并最终在应用程序域未处理异常委托处结束,因为没有人捕获此异常。这将调用我们的异常处理程序,该程序的任务是确保将异常对话框放置在调度程序上。 请问有什么方法...