问题标签 [dispatcher]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
3264 浏览

c# - 是否有任何命令可以立即更新 UI?

我想使用此代码将进度条从运行 1 更新到 100。

但结果是,UI 冻结,直到循环完成。

我知道Dispatcher可以提供帮助,但我不想拆分功能。

是否有任何命令可以立即更新 UI,例如..

编辑:我正在使用 WPF,并且我使用 Thread.Sleep 来模拟长时间运行的进程。

事实上,我想要任何喜欢的命令Application.DoEvents。但是我在 WPF 中找不到这个命令。

0 投票
3 回答
958 浏览

model-view-controller - Zend 框架中可以手动调度吗?

我想知道如何手动开始执行我的 MVC 应用程序的控制器操作。我的目标是使用简单的包含将 /myController/myAction 的 html 输出集成到另一个 php 应用程序(typo3)中。我想过手动实例化控制器、视图和布局,以绕过调度程序。可悲的是我无法让它工作。我目前的方法如下所示:

实例化布局没问题,但是创建控制器的时候就变得复杂了。在调用构造函数后设置视图实例不起作用,因为在实例化期间已经需要视图。

对于这种情况,什么是“正确”的方式?也许实现一个简单的用户定义调度程序,它使用我预定义的控制器和动作名称?

问候

格奥尔格·瓦赫特

0 投票
2 回答
1149 浏览

wpf - ListCollectionView 监控 Collection 时 Dispatcher.Invoke 挂起

我的问题感觉与这篇文章中提到的问题非常相似。本质上,Invoke 是挂起的(仅当在调试器之外运行时)。我认为这是由于 Invoke 调用的嵌套。

我正在使用 MVVM Light,并且我已经尝试了多线程友好的 ObservableCollection 的两种实现——我已经使用这个很久了,最近尝试简化到这个版本。后者似乎更好,直到它因“由该线程拥有”InvalidOperationException 而失败。看着我的前者副本,看起来我在那里吞下了异常。调皮调皮。这将是属性更改“失败”的原因。

这是麻烦的操作流程。几乎在每一点,我都尝试过将东西移到 ui 线程或将它们移出 ui 线程。我设法推迟挂起,但以财产变更失败为代价。

  • 请求来自 WCF 上的线程到主 ViewModel
  • 请求被解析(我在后台线程和调用主线程都试过)
  • 从数据库中检索 ReportEntry 对象
  • 显示通过 Messenger 请求编辑对话框发送到 UI 的消息。
  • 主窗口处理消息,调用 IEditableObject.BeginEdit 并显示编辑对话框。
  • 返回时调用 Messenger 回调 Action。
  • 现在可以将 ReportEntry 添加到其适当的集合中。MainViewModel 有一个 FileViewModel 的集合,每个 FileViewModel 都有一个 ReportViewModel 的集合。
    • ReportViewModels 通常由 FileViewModel 监视 FileModel 的集合的 CollectionChanged 事件创建。我试过绕过这个以避免更多的嵌套,但无济于事。

正是在这一点上,我的应用程序要么挂起(如果我主要在主线程上操作),要么 CollectionChanged 事件由于线程而失败,这取决于我在线程之间移动事物的方式。

根据我附加的调试器,当应用程序挂起时,它处于从 Invoke 调用的等待状态。

哦,我已经尝试将各种 Invoke 更改为 BeginInvoke。

总而言之,我需要回答以下两个问题之一:

  1. 是什么让我的 UI 线程进入等待模式,使得 Invoke 挂起?
  2. 是否有更好的 ObservableCollection 派生类用于此?

谢谢你的思考。

更新

好吧,我不知道是否删除这个问题并重新开始或什么。看来问题与我用来过滤 ReportEntry 的 ListCollectionView 有关。我的 FileViewModel 有一个

像这样初始化:

当我删除 FilteredReports 时,不再挂起。烦人的是,我将此视图用作 ItemsSource 的 DataGrid 位于 DataTemplate 中,因此将过滤器移至我的视图也并非易事。那么,ListCollectionView 有什么理由挂在 Collection 更新上?

0 投票
1 回答
1688 浏览

c# - 如何从 Try - Catch 中停止 DispatcherTimer?

请帮助我了解如何在第一次尝试不成功后停止尝试MethodOne()在 WPF DispatcherTimer 的事件处理程序中执行。dispatcherTimer.Tick

我想设置一些锁或停止计时器,但尝试这样做时我遇到了从 Try-Catch 构造内部看到其他代码的问题,并且不确定如何正确克服它。

0 投票
1 回答
323 浏览

wpf - WPF: When do I need to call Dispatcher.BeginInvoke

I know that Dispatcher.BeginInvoke is needed whenever I'm updating the GUI on a background thread. But how do I determine at runtime if it is needed?

0 投票
1 回答
996 浏览

struts2 - Struts 2 调度程序

我只想初始化(在 Struts2 中)一个属性(从文件加载数据)一次,并使该属性可用于整个 struts 2 应用程序。我怎样才能做到这一点?我需要覆盖 struts 2 调度程序吗?

问候拉朱

0 投票
1 回答
1524 浏览

c# - 使用 ObserveOnDispatcher 进行单元测试

我的视图模型中有一些代码如下:

然后在我的测试中,我“嘲笑”我的服务如下:

问题是由于 ObserveOnDispatcher,订阅委托永远不会执行。

我看过一些带有 DispatcherFrame 和 PushFrame 的代码,但问题是我不知道“在哪里”,我可以调用

0 投票
2 回答
19846 浏览

c# - C#,WPF,在需要时自动调用 Dispatcher.Invoke?

我有一个嵌入了地理空间地图的程序。地图的事件处理在单独的线程上处理以保持地图响应(例如,单击地图时触发的事件)。

我遇到的问题是当地图触发一个事件时,我的程序需要更新它的 gui 中的一些内容,并且还需要回调到地图中以处理在地图上放置图片。

我尝试将整个事件处理程序方法包装在 this.Dispatcher.Invoke 中,这让我回到了主 UI 线程。这对于更新我的 GUI 非常有用,但是当我回调到地图时,我仍然在 UI 线程上,这可能会导致地图中出现一些问题。

基本上,为了完成这项工作,每次我想更改我的 gui 上的控件时,我都必须运行 dispatcher.invoke。有没有一种方法可以自动执行此操作,而无需将每个调用都包装在 dispatcher.invoke 中?我希望这一切都有意义。

这是我正在谈论的事件的一些示例代码..

0 投票
1 回答
2385 浏览

multithreading - 线程 101:什么是调度程序?

曾几何时,我牢牢记住了这件事。随着时间的流逝,我的理解已经淡化,我打算刷新它。

我记得,任何所谓的单线程应用程序都有两个线程:

a) 具有指向 main 或 DllMain 入口点的指针的主线程;和

b) 对于具有一些 UI 的应用程序,一个 UI 线程,也就是第二个线程,WndProc 在其上运行,即执行 WndProc 的线程接收 Windows 发布给它的消息。简而言之,就是执行 Windows 消息循环的线程。

对于 UI 应用程序,主线程处于阻塞状态,等待来自 Windows 的消息。当它接收到它们时,它将它们排队并将它们分派到消息循环 (WndProc) 并且 UI 线程开始启动。

据我了解,处于阻塞状态的主线程是这样的:

C++

C# 或 VB.NET WinForms 应用程序:

这就是他们所说的调度员吗?

我的问题是:

a) 我的上述理解正确吗?

b) 调度员到底是什么鬼?

c) 指向我可以从 Windows/Win32 角度更好地理解线程的资源,然后将其与 C# 等高级语言联系起来。Petzold 在他史诗般的作品中对这个主题的讨论很谨慎。

虽然我相信我的说法有些正确,但确认会缓解。

0 投票
3 回答
7704 浏览

wpf - WPF Dispatcher,后台工作人员和很多痛苦

好吧,这可能真的很简单,但我尝试的一切似乎都碰壁了。

我有一个具有两个属性的视图模型,它们绑定到我的 WPF 表单:

我有一个方法,我调用它来从 Outlook 中获取一些新的待处理项目,但是我还要在表单上显示某种进度(旋转进度条),进度条可见性绑定到 ViewModel 上的 IsWorking 属性,并且网格绑定到 PendingItems 集合。

我希望能够将 IsWorking 设置为 true,以便 UI 可以显示进度条,在后台运行工作,然后在完成后将 IsWorking 设置为 false,这样进度条就会消失。

我创建了一个类似这样的背景工作者:

现在 worker_DoWork 调用获取挂起项目并将它们添加到 PendingItems 集合的方法,一切都在后台运行,UI 仍然响应但我在尝试添加到集合时得到正常的跨线程错误。我将更改集合的代码包装在调度程序调用中:

但它仍然会引发相同的跨线程错误。

我对线程不是很好,所以我不知道我可能做错了什么,有人能帮我解决这个问题吗?