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

时间:2011-02-09 15:55:21

标签: c# multithreading silverlight silverlight-4.0 backgroundworker

UI树:

  • listbox with the april 2010 toolkit's listboxdragdroptarget
  • 列表框项模板包含一个具有几个按钮的控件
  • 有问题的点击处理程序位于其中一个按钮中(因此是UI中实际listboxitem的一部分,因此可能存在拖放操作)
  • 整个列表框项能够拖动(在列表框中重新排列,或移动到另一个列表框),但目标是让这些按钮上的点击处理程序不会触发拖动< / LI>

目前,其中一个按钮(见上文)上的点击处理程序似乎需要足够长的时间(它会对viewmodel进行一系列更新,这会导致各种其他UI更改,因此需要在UI线程AFAICT上)它经常导致拖动事件开始。

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

我当然可以使用线程池甚至是一个新线程排队,然后让它将其封装回UI线程,但这似乎又是滥用。

1 个答案:

答案 0 :(得分:1)

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