public static PreLoad Create(Func <CancellationToken, Task <List <Uri> > > urisFunc, Func <Uri, CancellationToken, Task <byte[]> > imgsFunc, int uriCount, int imgCount, int taskCount) { var uris = Channel.CreateBounded <Uri>(uriCount); var imgs = Channel.CreateBounded <byte[]>(imgCount); var cancelSource = new CancellationTokenSource(); var cancelAction = CreateCencelAction(uris, imgs, cancelSource); Task.Run(() => GetUrisTask(urisFunc, uris, cancelSource.Token)) .ContinueWith(cancelAction); AddAllTask(taskCount, () => GetImageTask(imgsFunc, uris, imgs, cancelSource.Token)) .ContinueWith(cancelAction); var v = new PreLoad(); v.CancelAction = () => cancelAction(Task.CompletedTask); v.ReadFunc = () => imgs.Reader.ReadAsync(cancelSource.Token); return(v); }
public ViewImageListPage(ViewImageListPageInfo info) { InitializeComponent(); m_info = info; var coll = new ObservableCollection <Data>(); m_coll = coll; m_view.ItemsSource = coll; m_preLoad = m_info.Start(m_pagesText, coll); }