问题标签 [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.
wpf - WPF 调度程序计时器滴答冻结我的应用程序
我在使用 WPF Dispatcher Timer 时遇到了一点问题。在每个计时器滴答声上,我的应用程序都会冻结片刻(直到计时器滴答声方法完成)。这是我的代码:
有什么办法可以避免这种情况并让我的应用程序顺利运行?
.net - “调用线程必须是 STA,因为许多 UI 组件都需要这个”在线程中创建 WPF 弹出窗口时出现错误
我有一个 WPF 应用程序,其中一个线程检查一些值。在某些情况下,我会显示一个弹出窗口Window
以显示消息。当我在线程中创建这个弹出窗口时,弹出窗口的构造函数会抛出异常:
“调用线程必须是 STA,因为很多 UI 组件都需要这个。”
如何解决此错误?
这是我创建弹出窗口的代码:
wpf - 如何获取 UI 线程的 Dispatcher?
Dispatcher
当您没有引用任何 UI 元素时,有什么方法可以获取 UI 线程?
wpf - WPF - 调度程序 PushFrame()
我试图从几个不同的线程调用 Dispatcher.PushFrame() 但遇到错误:
必须在与 DependencyObject 相同的线程上创建 DependencySource。
这是一个代码片段:
当我尝试时:
我得到错误:
对象必须由同一个线程创建。
将多个帧从不同线程推送到 Dispatcher 的方法是什么?
wpf - WPF 后台线程调用
也许我记错了 Winforms 的工作原理,或者我把这件事搞得太复杂了,但这是我的问题。
我有一个 WPF 客户端应用程序,它通过 WCF 与服务器通信。当前用户可能会“注销” WPF 客户端,这会关闭所有打开的屏幕,只留下导航窗格,并最小化程序窗口。当用户重新最大化程序窗口时,会提示他们登录。简单。
但有时事情会发生在后台线程上——比如客户端每 5 分钟尝试进行一次 WCF 调用以刷新一些缓存的数据。如果在这个 5 分钟计时器触发时用户退出了怎么办?那么,应该提示用户重新登录......这当然必须发生在 UI 线程上。
到目前为止一切顺利,对吧?但是当多个线程碰到这个代码点时会发生什么?
好吧,我的第一个直觉是,由于我正在跨 Application.Current.Dispatcher 同步,所以我应该没问题,无论哪个线程首先命中都将负责显示登录表单并让用户登录......
不是这样的...
线程 1 将点击代码并在登录表单上调用 ShowDialog
线程 2 也将命中代码,并在线程 1 调用 ShowDialog 后立即调用 Login,因为调用 ShowDialog 未阻塞线程 1(我相信是因为 WPF 消息泵的工作方式)
...最终效果是我一次向用户弹出了多个登录表单。
我想要的只是让用户重新登录到应用程序的同步方式......我在这里错过了什么?
提前致谢。
apache-flex - 组件没有监听 MainApp 的状态变化
我不知道这是太难还是太容易了。我的自定义组件正在尝试使用 StateChangeEvent.CURRENT_STATE_CHANGE 监听主应用程序的状态更改,但它正在报告自己的状态更改。
知道我该怎么做吗?
c# - WPF Dispatcher 执行多个执行路径
好的,所以我在周末发现了一些奇怪的东西。我有一个 WPF 应用程序,它产生一些线程来执行后台工作。然后这些后台线程将工作项发布到我的同步上下文中。除了一种情况外,这一切都很好。当我的线程完成时,有时他们会在调度程序上发布一个操作,这将打开一个弹出窗口。最终发生的是,如果 2 个线程都在 Dispatcher 上发布一个动作,它开始处理一个,然后如果我用 Window.ShowDialog(); 打开一个弹出窗口;当前执行路径暂停等待对话框的反馈。但是问题出现了,当对话框打开时,Dispatcher 然后开始并立即开始运行已发布的第二个操作。这导致两个代码路径被执行。
我已经发布了一些示例代码来演示我正在谈论的行为。应该发生的是,如果我发布了 2 个操作并且第一个操作打开了一个对话框,那么在第一个操作完成之前,第二个操作不应该运行。
XAML 只是一个带有调用 Button_ClickWithout OnClick 的按钮的窗口。如果您按下按钮两次并等待 3 秒,您将看到 2 个对话框一个接一个地弹出,其中预期的行为将是第一个弹出,然后一旦关闭,第二个将弹出。
所以我的问题是:这是一个错误吗?或者我该如何缓解这种情况,以便在第一个操作使用 Window.ShowDialog() 停止执行时,我只能处理一个操作?
谢谢,劳尔
c# - DispatcherOperations.Wait()
如果你调用dispatcherOperation.Wait()
一个已经完成的操作会发生什么?此外,文档说它返回 a DispatcherOperationStatus
,但不是总是这样,Completed
因为它(据说)在完成之前不会返回?
我试图这样使用它:
我在 WPF 中使用它,所以所有Add
操作都必须发生在 UI 线程上,但我想我基本上可以将它们排队,而不必等待它切换线程,然后Update()
在任何读取操作之前调用以确保该列表是最新的,但我的程序开始挂起。
c# - WPF:从 Dispatcher 修改 CollectionView 仍然会引发错误
我有以下代码可以在用户离开时修改可观察的“屏幕”集合。
这包含在对客户端 Dispatcher 的调用中,据说是为了解决与 CollectionViews 相关的线程问题。但是,我仍然得到以下异常:
这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection。
您在上面看到的 Dispatcher 是在 WPF 应用程序的 MainViewModel 中设置的(我们使用的是 MVVM),如下所示:
c# - 在 Silverlight 3 中,如何在调整大小后调用 HtmlPage.Plugin.SetStyleAttribute() 调用以调用其他代码?
我正在尝试使用 WriteableBitmap 拍摄我的 Silverlight 控件的快照,它工作正常,但是,它只拍摄显示内容的快照。我正在尝试调整 Silverlight 控件的大小,以便它显示所有内容然后截屏,但是,代码不会调整控件的大小,直到调用后的代码全部运行之后,这是快照代码......
在其他代码导致调整大小后,我可以使用计时器触发快照来完成这项工作,但我想知道是否有更好的方法。必须从 UI 线程调用 HtmlPage.Plugin.SetStyleAttribute 调用,所以我假设这就是问题所在。事实上,它被分派到 UI 线程,而其余代码没有,因此其他代码首先运行。
无论如何要创建一个新事件或附加到调用以确定它何时运行然后触发我的快照代码?
我有以下代码:
谢谢,
约翰