1
我遇到以下问题:多线程WPF应用程序,Model View Presenter实现。属于一起的演示者和视图由工厂在单独的线程上创建,并应该获得单独的分派器。Multiple Dispatchers问题
Public Function CreatePresenter(Of T As {New, Class})(ByVal p_eCreationOptions As eViewCreationOptions) As T Implements IPresenterFactory.CreatePresenter
Select Case p_eCreationOptions
Case eViewCreationOptions.CreateInCallingThread
CreatePresenter(Of T)()
Case eViewCreationOptions.CreateInNewThread
Dim oThread As New Thread(New ThreadStart(AddressOf CreatePresenter(Of T)))
oThread.SetApartmentState(System.Threading.ApartmentState.STA)
oThread.Start()
oThread.Join()
Case Else
Throw New InvalidOperationException("Need to specify creation options.")
End Select
Return CType(m_oCreatedPresenter, T)
End Function
Private Sub CreatePresenter(Of T As {New, Class})()
m_oCreatedPresenter = Activator.CreateInstance(Of T)()
End Sub
的问题是,现在是另一个线程上创建的主持人和线程创建之后进入休眠,但有调度员尚未运行。现在,如果我来自应用程序所在的主UI线程并向我的演示者打电话,我创建视图,显示它,现在只有我可以调用Dispatcher.Run()。
Public Overloads Sub Show()
Console.WriteLine ("Show Caller ThreadID = " & Thread.CurrentThread.ManagedThreadId)
MyBase.Show()
System.Windows.Threading.Dispatcher.Run()
End Sub
但我想要做的是,当上了主持人的方法是从另一个线程比在该主持人的生活,再次调用该方法,在那里他有他自己的调度员演示的线程上调用,因此我不需要在我的Presenter和视图之间的呼叫中处理Dispatcher。 这是可能的吗,我的设计是否有缺陷或有什么更好的方法来实现我想要的?
我在我的博客上发布了一个解决方案,位于http://www.philippbraun.net/2008/12/handling-multiple-dispatchers-in-wpf.html – 2008-12-28 15:54:42