/// <summary> /// Loads ads from a source URI. Note, this is called automatically if you set the source before the MediaLoading event fires and normally does not need to be called. /// </summary> /// <param name="source">The VMAP source URI</param> /// <param name="c">A cancellation token that allows you to cancel a pending operation</param> /// <returns>A task to await on.</returns> public async Task LoadAds(Uri source, CancellationToken c) { adBreaks.Clear(); var cancellationToken = CancellationTokenSource.CreateLinkedTokenSource(c, cts.Token).Token; #if SILVERLIGHT var vmap = await VmapFactory.LoadSource(source, cancellationToken); #else var vmap = await VmapFactory.LoadSource(source).AsTask(cancellationToken); #endif foreach (var adBreak in vmap.AdBreaks) { CreateAdvertisement(adBreak); } }
async void timer_Tick(object sender, object e) { try { #if SILVERLIGHT var vmap = await VmapFactory.LoadSource(Source, cts.Token); #else var vmap = await VmapFactory.LoadSource(Source).AsTask(cts.Token); #endif // remove all ads that were not found new info foreach (var adBreak in adBreaks.Where(existingBreak => !vmap.AdBreaks.Any(newBreak => newBreak.BreakId == existingBreak.Value.BreakId))) { Advertisements.Remove(adBreak.Key); } // create new ads for those that do not already exist foreach (var adBreak in vmap.AdBreaks.Where(newBreak => !adBreaks.Values.Any(existingBreak => existingBreak.BreakId == newBreak.BreakId))) { CreateAdvertisement(adBreak); } } catch { /* ignore */ } }