私のアプリケーションは、ユーザーがお互いにファイルをダウンロードできるようにする基本的なダウンロードアプリです(非常に基本的なカザー:-))
ダウンロードごとにプログレスバーが表示され、実際のダウンロードの進行状況に応じて更新する必要があります。
progressプロパティを保持するdownloadInstanceオブジェクトを保持するobservablecollectionがあります。
プログレスプロパティを更新すると、observablecollection変更イベントが発生しない可能性があり、プログレスバーは視覚的な進行なしで表示されたままになります。
これが私のthreadsaveobservablecollectionクラスです
public class ThreadSafeObservableCollection<T> : ObservableCollection<T>
{
public override event NotifyCollectionChangedEventHandler CollectionChanged;
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
NotifyCollectionChangedEventHandler CollectionChanged = this.CollectionChanged;
if (CollectionChanged != null)
foreach (NotifyCollectionChangedEventHandler nh in CollectionChanged.GetInvocationList())
{
DispatcherObject dispObj = nh.Target as DispatcherObject;
if (dispObj != null)
{
Dispatcher dispatcher = dispObj.Dispatcher;
if (dispatcher != null && !dispatcher.CheckAccess())
{
dispatcher.BeginInvoke(
(Action)(() => nh.Invoke(this,
new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset))),
DispatcherPriority.DataBind);
continue;
}
}
nh.Invoke(this, e);
}
}
}
これは初期化プロセスです
uploadActiveInstances = new ThreadSafeObservableCollection<instance>();
instance newInstance = new instance() { File = file, User = user };
uploadActiveInstances.Add(newInstance);
そして最後にこれが私のインスタンスクラスです
public class instance
{
public FileShareUser User { get; set; }
public SharedFile File { get; set; }
public int Progress { get; set; }
}
インスタンスのプロパティが変更されたら(progress ++)、どうすれば変更イベントを発生させることができますか?