WPF 使用Caliburn.Micro 多線程打開窗口

 咱們都知道在WPF裏面用多線程打開一個窗口很簡單.以下多線程

public void ClickMe(object sender)
{
Thread newWindowThread = new Thread(new ThreadStart(A));
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();
}框架

public void A()
{
Window w=new Window();//這個你想打開哪一個就實例化哪一個
w.Show();
System.Windows.Threading.Dispatcher.Run();
}異步

可是在使用Caliburn.Micro它的時候,咱們知道在WPF裏面開闢其餘的線程是由Dispatcher他來搞定的.可是在ViewModel裏面沒辦法實例化你想要的頁面,只有VIewModel.而CMspa

這個框架有3個打開窗口的方法好比ShowDialog等等.他原理是更具ViewModel生成View.源碼以下線程

 

咱們能夠看到他最後返回一個View,但咱們直接調用他會報這個錯3d

其實想一想也能明白,咱們在ViewModel裏面調用這個ShowDialog,他的全部者確定是本頁面,咱們用Dispatcher開闢一個新線程,用新線程去調用父線程(這個說法可能不對)的方法確定是不行的.因此說這個對象已經被另外一個對象擁有了.  我覺的到這個時候你們都知道該怎麼作了,那就是看源碼,找到哪一個地方給全部者賦值了.找源碼對象

咱們能夠看到紅框裏面的就是給全部者賦值的,把他註釋了,在試試就能夠了.blog

緣由就是上面的了.把這個類單獨拿出來,提出一個方法專門打開異步的窗口挺好,哈哈,開源就是好.源碼

相關文章
相關標籤/搜索