如何使用Wpf中的Dispatcher.BeginInvoke或Dispatcher.Invoke生成后台线程

时间:2014-04-26 18:58:06

标签: c# wpf multithreading mvvm

我想知道有没有一种方法可以使用Dispatcher.BeginInvoke()生成或启动一个线程 同时由于在Dispatcher中生成的线程而没有阻塞UI。基本上我正在使用MVVM处理WPF应用程序,在这个应用程序的开头我需要在主窗口上显示带有文本块(带有一些默认字符串)的空白视图。直到这里一切正常。现在,在显示视图后,我必须启动繁重的后台任务(这些任务基本上是我的ViewModel类中的函数),并且应该在视图的文本块上更新这些任务的状态。我已经使用ViewModel类中的公共属性StatusMessage绑定了textblock的text属性。所以我在这里对这些问题视而不见:

  1. 我将如何以及在何处开始执行任务?在ViewView的代码后面或MainView Model类中?由于Window上没有UI控件,我必须使用Dispatcher.BeginInvoke()自行启动任务。通过使用此功能,我可以启动任务,但每次ViewModel中的属性更改时,UI状态都不会更新。我看到最近的更新状态也只有在任务完成时才会显示。
  2. 我听说过BackgroundWorker类可以卸载在UI线程上完成的繁重任务。在这里我有一个疑问如果我使用Dispatcher类来调用由BackgroundWorker类处理的事件。它会对UI线程产生什么影响我的意思是它会被阻止还是只是在提升事件后返回?
  3. 应用程序的一些背景:它有一个Mainwindow,它只包含一个徽标,MainViewModel(有一个属性_viewModel)被设置为该窗口的datacontext。此主窗口根据_viewModel中包含的ViewModel显示不同的视图。 我对wpf和mvvm有些新意,但这是我必须完成的某种要求。请告知我这方面的任何链接都是受欢迎的。提前谢谢。

0 个答案:

没有答案