我可以在不同的线程上运行2个或更多WPF窗口。 问题是现在我的应用程序在许多窗口中分裂了。
我真正想要的是一个包含网格的主窗口,其中每个单元格都包含一个由不同线程管理的元素。
是否可以创建由不是管理父/包含窗口的线程管理的UIElement / Component?
或
是否可以封装在某个框架/ UIElement中的不同线程上运行的窗口?
由于
是否可以使用MediaElement将窗口投影到Panel?
答案 0 :(得分:1)
这在WPF中是不可能的,即使它是一个坏主意:
在WPF中是不可能的,因为WPF元素只能由创建它们的线程使用,如果你从另一个线程中添加一个他们无法通信的子元素。
在纯Win32中它是可能的 - 但是它加入了两个线程的消息队列,所以线程不再是独立的(所以即使你发现一个使它与WPF一起工作的hack它仍然没有帮助你)
任何具有UI并执行长时间运行任务的线程都可以挂起整个系统 - 因此无法在UI线程中执行任何长时间运行的任务 - 而是在后台线程中运行长任务
因为您必须保持UI线程的响应 - >它应该永远不会忙碌一段时间 - >它可以处理你所有的窗户,因为它不太忙。
答案 1 :(得分:1)
“我真正想要的是有一个包含网格的主窗口,其中每个单元格都包含一个由不同线程管理的元素。”
解决此问题的一种方法是在单元格中正常创建元素。创建一个常规类ViewModel,它不会触及UI,而是在它自己的线程上运行。这个课程是你在细胞中实际尝试做的事情背后的大脑,而不是你想要在你的细胞中展示的东西。此ViewModel类应在其数据更新时实现INotifyPropertyChanged。在MainWindow.cs文件中,您可以将单元格元素的DataContext设置为这些ViewModel。最后,在您的XAML中,您可以使用ViewModel中的“属性”绑定要尝试显示的内容。
我知道我轻松了解了很多细节,但这是一个起点。如果您需要,可以在这里获得很多帮助。