マルチスレッドとWPFは初めてです。
私は、ObservableCollection<RSSFeed>アプリの起動時にアイテムがUIスレッドからこのコレクションに追加されています。RSSFeedのプロパティは、WPFListViewにバインドされます。後で、各RSSFeedを非同期で更新したいと思います。だから私はそのようなものを実装RSSFeed.FetchAsync()し、更新されたプロパティでPropertyChangedを上げることを考えています。
ObservableCollectionはUIスレッド以外のスレッドからの更新をサポートしていないことを知っています。NotSupportedExceptionをスローします。しかし、私はObservableCollection自体を操作するのではなく、そのアイテムのプロパティを更新しているので、これが機能し、ListViewアイテムが更新されることを期待できますか?それとも、PropertyChangedが原因でとにかく例外をスローしましたか?
編集:コード
RSSFeed.cs
public class RSSFeed
{
    public String Title { get; set; }
    public String Summary { get; set; }
    public String Uri { get; set; }        
    public String Encoding { get; set; }
    public List<FeedItem> Posts { get; set; }
    public bool FetchedSuccessfully { get; protected set; }        
    public RSSFeed()
    {
        Posts = new List<FeedItem>();
    }
    public RSSFeed(String uri)
    {
        Posts = new List<FeedItem>();
        Uri = uri;
        Fetch();
    }
    public void FetchAsync()
    { 
        // call Fetch asynchronously
    }
    public void Fetch()
    {
        if (Uri != "")
        {
            try
            {
                MyWebClient client = new MyWebClient();
                String str = client.DownloadString(Uri);
                str = Regex.Replace(str, "<!--.*?-->", String.Empty, RegexOptions.Singleline);
                FeedXmlReader reader = new FeedXmlReader();
                RSSFeed feed = reader.Load(str, new Uri(Uri));
                if (feed.Title != null)
                    Title = feed.Title;
                if (feed.Encoding != null)
                    Encoding = feed.Encoding;
                if (feed.Summary != null)
                    Summary = feed.Summary;
                if (feed.Posts != null)
                    Posts = feed.Posts;
                FetchedSuccessfully = true;
            }
            catch
            {
                FetchedSuccessfully = false;
            }
        }
    }
UserProfile.cs
public class UserProfile : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public event CollectionChangeEventHandler CollectionChanged;
    private ObservableCollection<RSSFeed> feeds;
    public ObservableCollection<RSSFeed> Feeds 
    { 
        get { return feeds; }
        set { feeds = value; OnPropertyChanged("Feeds"); }
    }
    public UserProfile()
    {
        feeds = new ObservableCollection<RSSFeed>();
    }
    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
    protected void OnCollectionChanged(RSSFeed feed)
    {
        CollectionChangeEventHandler handler = CollectionChanged;
        if (handler != null)
        {
            handler(this, new CollectionChangeEventArgs(CollectionChangeAction.Add, feed));
        }
    }
}
MainWindow.xaml.cs
public partial class MainWindow : Window, INotifyPropertyChanged
{
    // My ListView is bound to this
    // ItemsSource="{Binding Posts}
    public List<FeedItem> Posts
    {
        get 
        {
            if (listBoxChannels.SelectedItem != null)
                return ((RSSFeed)listBoxChannels.SelectedItem).Posts;
            else
                return null;
        }
    }
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        // here I load cached feeds
        // called from UI thread
        // now I want to update the feeds
        // since network operations are involved, 
        // I need to do this asynchronously to prevent blocking the UI thread
    }
}
ありがとう。