WPF线程问题

时间:2010-01-28 21:05:34

标签: c# wpf multithreading

假设我有两个用户控件,UC1和UC2。用户在UC1中选择一些内容,这需要一些时间,因此该过程将被删除。当UC1完成时,UC2需要更新其视图并在另一个线程上做一些自己的工作。但UC2依赖于UC1后台线程的输出,因此它必须等到该线程在开始之前完成。

UC1需要更新ObservableCollection以在其后台线程完成时更新其视图,就像UC1一样,异步更新。

这是最好的方法吗?我试过将它们线程化并从UC1的线程中发出消息,但是然后UC2无法修改它的ObservableCollection,因为它不在正确的线程上 - 它认为它在UC1的线程上。

我是否需要编组从UC1到UC2的消息事件,这样安全吗?

人们通常如何处理这个问题?

1 个答案:

答案 0 :(得分:2)

两个UserControl都应该在同一个线程上。这就是WPF的设计方式。

由于UC2依赖于UC1也依赖的事件,因此我将UC1作为事件生命周期的范围,并在工作完成时将消息发送给UC2,否则UC2订阅ObservableCollection 'CollectionChanged事件。它们都存在于同一个UI线程中,因此不需要在它们之间进行编组,您只需要将后台线程编组到相应的UserControl