WPF 使用Caliburn.Micro 多线程打开窗口_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > WPF 使用Caliburn.Micro 多线程打开窗口

WPF 使用Caliburn.Micro 多线程打开窗口

 2013/12/9 17:26:01  李晋  博客园  我要评论(0)
  • 摘要:我们都知道在WPF里面用多线程打开一个窗口很简单.如下publicvoidClickMe(objectsender){ThreadnewWindowThread=newThread(newThreadStart(A));newWindowThread.SetApartmentState(ApartmentState.STA);newWindowThread.IsBackground=true;newWindowThread.Start();}publicvoidA()
  • 标签:使用 多线程 线程

 我们都知道在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.而CM

这个框架有3个打开窗口的方法比如ShowDialog等等.他原理是更具ViewModel生成View.源码如下

 

我们可以看到他最后返回一个View,但我们直接调用他会报这个错

其实想想也能明白,我们在ViewModel里面调用这个ShowDialog,他的所有者肯定是本页面,我们用Dispatcher开辟一个新线程,用新线程去调用父线程(这个说法可能不对)的方法肯定是不行的.所以说这个对象已经被另一个对象拥有了.  我觉的到这个时候大家都知道该怎么做了,那就是看源码,找到哪个地方给所有者赋值了.找源码

我们可以看到红框里面的就是给所有者赋值的,把他注释了,在试试就可以了.

原因就是上面的了.把这个类单独拿出来,提出一个方法专门打开异步的窗口挺好,哈哈,开源就是好.

发表评论
用户名: 匿名