/// <summary>Load an <see cref="Asset"/>.</summary> /// <param name="loader"></param> /// <param name="formats"></param> /// <param name="resolveConflict"></param> /// <returns></returns> public static Asset LoadAsset(AssetLoader loader, IEnumerable <AssetFormat> formats, ResolveLoadConflictCallback resolveConflict = null) { LoadMatchStrength matchStrength; AssetFormat format = LoadMatchAsset(out matchStrength, loader, formats, resolveConflict); if (loader.Context != null) { loader.Context.LoadErrors = loader.Errors; } return(format.Load(loader)); }
/// <summary>Load an <see cref="Asset"/>.</summary> /// <param name="loader"></param> /// <param name="formats"></param> /// <param name="resolveConflict"></param> /// <param name="progress"></param> /// <param name="progressUpdateRate"></param> /// <returns></returns> public static Task <Asset> LoadAssetAsync(AssetLoader loader, IEnumerable <AssetFormat> formats, ResolveLoadConflictCallback resolveConflict = null, AssetLoaderProgressCallback progress = null, TimeSpan?progressUpdateRate = null) { TimeSpan progressUpdateRateValue = progressUpdateRate.GetValueOrDefault(TimeSpan.FromSeconds(0.1)); LoadMatchStrength matchStrength; AssetFormat format = LoadMatchAsset(out matchStrength, loader, formats, resolveConflict); if (loader.Context != null) { loader.Context.LoadErrors = loader.Errors; } return(new Task <Asset>(() => { Asset asset = null; bool complete = false; Thread loadThread = new Thread(() => { asset = format.Load(loader); complete = true; }); loadThread.Start(); while (!complete) { if (!loadThread.IsAlive) { throw new InvalidOperationException("The load operation failed."); } Thread.Sleep(progressUpdateRateValue); if (progress != null) { progress.Invoke(loader); } } return asset; })); }