silverlight 4 - 在 UI 线程上安排工作的最快/最简单的方法?

发布于 2024-10-17 01:33:06 字数 613 浏览 5 评论 0原文

UI 树:

  • 带有 2010 年 4 月工具包的 listboxdragdroptarget
  • 列表框项模板的列表框包含一个控件,该控件具有几个按钮,有
  • 问题的单击处理程序位于其中一个按钮中(因此是 UI 中实际列表框项的一部分,因此潜在的拖拽操作)放置操作)
  • 整个列表框项目应该能够拖动(在列表框中重新排列,或移动到另一个列表框),但目标是防止这些按钮上的单击处理程序触发

当前的 拖动其中一个按钮上的单击处理程序(见上文)似乎需要足够长的时间(它对视图模型进行大量更新,这会导致各种其他 UI 更改,因此它需要位于 UI 线程 AFAICT 上),以至于经常出现导致拖动事件开始。

从点击处理程序中获取此代码的第一个想法是创建一个不带 DoWork 的 BackgroundWorker 并将其全部放入 RunWorkerCompleted 中。然而,这感觉像是对BackgroundWorker 的滥用,而且有点重量级。我想要的效果类似于同一线程(UI 线程)上的 PostThreadMessage,但我没有看到任何关于如何快速完成的内容。

我当然可以使用线程池甚至一个新线程对某些内容进行排队,然后将其封送回 UI 线程,但这似乎又是一种滥用。

UI tree:

  • listbox with the april 2010 toolkit's listboxdragdroptarget
  • listbox item template includes a control that has a a couple of buttons
  • the click handler in question is in one of those buttons (and therefore part of the actual listboxitem in the UI, so a potential drag-drop operation)
  • the overall listbox item should be able to drag (to rearrange within the listbox, or move to another listbox), but the goal is to keep the click handlers on these buttons from triggering a drag

Currently the click handler on one of the buttons (see above) appears to take long enough (it does a bunch of updates to the viewmodel, which cause various other UI changes, so it needs to be on the UI thread AFAICT) that it very often causes the drag event to start.

The first thought on getting this code out of the click handler is to create a BackgroundWorker with no DoWork and put it all in the RunWorkerCompleted. However, that feels like both an abuse of BackgroundWorker and kind of heavyweight. The effect I want is akin to just PostThreadMessage on the same thread (the UI thread) but I'm not seeing anything jump out at me for how to do so quickly.

I could certainly queue up something with the threadpool or even a new thread and then have it marshal it back over to the UI thread, but again that seems like quite the abuse.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

指尖微凉心微凉 2024-10-24 01:33:06

我认为具有低 DispatcherPriority 的 Dispatcher.BeginInvoke 的行为几乎与 PostThreadMessage 类似。

I think Dispatcher.BeginInvoke with a low DispatcherPriority behaves almost like PostThreadMessage.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文